@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,10 +15,13 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import PropTypes from 'prop-types';
|
|
19
20
|
import { trayPropTypes } from './plugins/shared/CanvasContentTray';
|
|
20
21
|
import { RCEVariantValues } from './RCEVariants';
|
|
21
|
-
import { PRETTY_HTML_EDITOR_VIEW, RAW_HTML_EDITOR_VIEW, WYSIWYG_VIEW } from './StatusBar';
|
|
22
|
+
import { PRETTY_HTML_EDITOR_VIEW, RAW_HTML_EDITOR_VIEW, WYSIWYG_VIEW } from './StatusBar';
|
|
23
|
+
|
|
24
|
+
// This file contains the prop types for the RCEWrapper component, so that types can be shared without having
|
|
22
25
|
// to refactor RCEWrapper.js into typescript.
|
|
23
26
|
|
|
24
27
|
export const toolbarPropType = PropTypes.arrayOf(PropTypes.shape({
|
|
@@ -34,7 +37,8 @@ export const toolbarPropType = PropTypes.arrayOf(PropTypes.shape({
|
|
|
34
37
|
// registered with tinymce
|
|
35
38
|
items: PropTypes.arrayOf(PropTypes.string).isRequired
|
|
36
39
|
}));
|
|
37
|
-
export const menuPropType = PropTypes.objectOf(
|
|
40
|
+
export const menuPropType = PropTypes.objectOf(
|
|
41
|
+
// the key is the name of the menu item a plugin has
|
|
38
42
|
// registered with tinymce. If it does not exist in the
|
|
39
43
|
// default menubar, it will be added.
|
|
40
44
|
PropTypes.shape({
|
|
@@ -57,7 +61,8 @@ export const ltiToolsPropType = PropTypes.arrayOf(PropTypes.shape({
|
|
|
57
61
|
height: PropTypes.number,
|
|
58
62
|
width: PropTypes.number,
|
|
59
63
|
use_tray: PropTypes.bool,
|
|
60
|
-
canvas_icon_class: PropTypes.oneOfType([PropTypes.string,
|
|
64
|
+
canvas_icon_class: PropTypes.oneOfType([PropTypes.string,
|
|
65
|
+
// Sometimes this is an object with an icon_url. Not sure why, see MAT-1354
|
|
61
66
|
PropTypes.shape({
|
|
62
67
|
icon_url: PropTypes.string
|
|
63
68
|
}), PropTypes.any])
|
package/es/rce/RceHtmlEditor.js
CHANGED
|
@@ -24,9 +24,6 @@ const RceHtmlEditor = /*#__PURE__*/React.forwardRef((props, editorRef) => {
|
|
|
24
24
|
const [code, setCode] = useState(props.code);
|
|
25
25
|
const label = formatMessage('html code editor');
|
|
26
26
|
const [dir, setDir] = useState(getComputedStyle(document.body, null).direction);
|
|
27
|
-
useEffect(() => {
|
|
28
|
-
setCode(beautify.html(props.code)); // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
29
|
-
}, []);
|
|
30
27
|
useEffect(() => {
|
|
31
28
|
// INSTUI sets the CodeEditor's surrounding label's
|
|
32
29
|
// display inline-block so it doesn't fill the width
|
|
@@ -47,13 +44,13 @@ const RceHtmlEditor = /*#__PURE__*/React.forwardRef((props, editorRef) => {
|
|
|
47
44
|
}
|
|
48
45
|
`;
|
|
49
46
|
document.head.appendChild(stylesheet);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
47
|
+
}
|
|
48
|
+
// odds are, this won't change the dir.
|
|
53
49
|
setDir(getComputedStyle(editorRef.current || document.body, null).direction);
|
|
54
50
|
}, [dir, editorRef]);
|
|
55
|
-
const direction = ['ltr', 'rtl'].includes(dir) ? dir : 'ltr';
|
|
51
|
+
const direction = ['ltr', 'rtl'].includes(dir) ? dir : 'ltr';
|
|
56
52
|
|
|
53
|
+
// setting height on the container keeps the RCE toolbar from jumping
|
|
57
54
|
return /*#__PURE__*/React.createElement("div", {
|
|
58
55
|
ref: editorRef,
|
|
59
56
|
className: "RceHtmlEditor",
|
|
@@ -72,7 +69,7 @@ const RceHtmlEditor = /*#__PURE__*/React.forwardRef((props, editorRef) => {
|
|
|
72
69
|
direction: direction,
|
|
73
70
|
rtlMoveVisually: true,
|
|
74
71
|
height: props.height,
|
|
75
|
-
|
|
72
|
+
defaultValue: beautify.html(props.code),
|
|
76
73
|
onChange: value => {
|
|
77
74
|
setCode(value);
|
|
78
75
|
props.onChange(value);
|
package/es/rce/ResizeHandle.js
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import React, { useState } from 'react';
|
|
19
20
|
import { func, string, number } from 'prop-types';
|
|
20
21
|
import { DraggableCore } from 'react-draggable';
|
|
@@ -40,29 +41,23 @@ export default function ResizeHandle(props) {
|
|
|
40
41
|
});
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
|
-
|
|
44
44
|
function handleFocus(event) {
|
|
45
45
|
var _props$onFocus;
|
|
46
|
-
|
|
47
46
|
setIsFocused(true);
|
|
48
47
|
(_props$onFocus = props.onFocus) === null || _props$onFocus === void 0 ? void 0 : _props$onFocus.call(props, event);
|
|
49
48
|
}
|
|
50
|
-
|
|
51
49
|
function handleBlur() {
|
|
52
50
|
setIsFocused(false);
|
|
53
51
|
}
|
|
54
|
-
|
|
55
52
|
function handleDragStart(_e) {
|
|
56
53
|
setDragging(true);
|
|
57
54
|
}
|
|
58
|
-
|
|
59
55
|
function handleDragStop(_e) {
|
|
60
56
|
setDragging(false);
|
|
61
57
|
}
|
|
62
|
-
|
|
63
|
-
|
|
58
|
+
const [dragging, setDragging] = useState(false);
|
|
59
|
+
// tracking isFocused rather than leveraging instui Focusable
|
|
64
60
|
// because Focusable doesn't detect whan ResizeHandle gets focus
|
|
65
|
-
|
|
66
61
|
const [isFocused, setIsFocused] = useState(false);
|
|
67
62
|
return /*#__PURE__*/React.createElement(View, {
|
|
68
63
|
"aria-label": formatMessage('Drag handle. Use up and down arrows to resize'),
|
|
@@ -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, { useState } from 'react';
|
|
19
20
|
import { bool, func, string } from 'prop-types';
|
|
20
21
|
import { Alert } from '@instructure/ui-alerts';
|
|
@@ -26,9 +27,7 @@ import { View } from '@instructure/ui-view';
|
|
|
26
27
|
import formatMessage from '../format-message';
|
|
27
28
|
export default function RestoreAutoSaveModal(props) {
|
|
28
29
|
const [previewExpanded, setPreviewExpanded] = useState(false);
|
|
29
|
-
|
|
30
30
|
const toggleLabel = () => previewExpanded ? formatMessage('Click to hide preview') : formatMessage('Click to show preview');
|
|
31
|
-
|
|
32
31
|
return /*#__PURE__*/React.createElement(Modal, {
|
|
33
32
|
"data-testid": "RCE_RestoreAutoSaveModal",
|
|
34
33
|
"data-mce-component": true,
|
|
@@ -35,27 +35,23 @@ export default class ShowOnFocusButton extends Component {
|
|
|
35
35
|
this.state = {
|
|
36
36
|
visible: false
|
|
37
37
|
};
|
|
38
|
-
|
|
39
38
|
this.handleFocus = () => {
|
|
40
39
|
this.setState({
|
|
41
40
|
visible: true
|
|
42
41
|
});
|
|
43
42
|
};
|
|
44
|
-
|
|
45
43
|
this.handleBlur = () => {
|
|
46
44
|
this.setState({
|
|
47
45
|
visible: false
|
|
48
46
|
});
|
|
49
47
|
};
|
|
50
48
|
}
|
|
51
|
-
|
|
52
49
|
focus() {
|
|
53
50
|
this.btnRef.focus();
|
|
54
51
|
this.setState({
|
|
55
52
|
visible: true
|
|
56
53
|
});
|
|
57
54
|
}
|
|
58
|
-
|
|
59
55
|
renderButton() {
|
|
60
56
|
return /*#__PURE__*/React.createElement(IconButton, {
|
|
61
57
|
id: this.props.id,
|
|
@@ -74,14 +70,12 @@ export default class ShowOnFocusButton extends Component {
|
|
|
74
70
|
withBorder: false
|
|
75
71
|
}, this.props.children);
|
|
76
72
|
}
|
|
77
|
-
|
|
78
73
|
render() {
|
|
79
74
|
return /*#__PURE__*/React.createElement("div", {
|
|
80
75
|
"data-testid": "ShowOnFocusButton__wrapper",
|
|
81
76
|
style: this.state.visible ? null : hideStyle
|
|
82
77
|
}, this.renderButton());
|
|
83
78
|
}
|
|
84
|
-
|
|
85
79
|
}
|
|
86
80
|
ShowOnFocusButton.propTypes = {
|
|
87
81
|
children: oneOfType([node, func]).isRequired,
|
package/es/rce/StatusBar.js
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import React, { useEffect, useRef, useState } from 'react';
|
|
19
20
|
import ReactDOM from 'react-dom';
|
|
20
21
|
import { arrayOf, bool, func, number, oneOf, string } from 'prop-types';
|
|
@@ -34,10 +35,10 @@ import { FS_ENABLED } from '../util/fullscreenHelpers';
|
|
|
34
35
|
import { AIWandSVG } from './plugins/shared/ai_tools';
|
|
35
36
|
export const WYSIWYG_VIEW = 'WYSIWYG';
|
|
36
37
|
export const PRETTY_HTML_EDITOR_VIEW = 'PRETTY';
|
|
37
|
-
export const RAW_HTML_EDITOR_VIEW = 'RAW';
|
|
38
|
+
export const RAW_HTML_EDITOR_VIEW = 'RAW';
|
|
38
39
|
|
|
40
|
+
// I don't know why eslint is reporting this, the props are all used
|
|
39
41
|
/* eslint-disable react/no-unused-prop-types */
|
|
40
|
-
|
|
41
42
|
StatusBar.propTypes = {
|
|
42
43
|
id: string.isRequired,
|
|
43
44
|
rceIsFullscreen: bool,
|
|
@@ -65,24 +66,23 @@ StatusBar.defaultProps = {
|
|
|
65
66
|
a11yErrorsCount: 0,
|
|
66
67
|
disabledPlugins: []
|
|
67
68
|
};
|
|
69
|
+
|
|
68
70
|
/* eslint-enable react/no-unused-prop-types */
|
|
69
|
-
// we use the array index because pathname may not be unique
|
|
70
71
|
|
|
72
|
+
// we use the array index because pathname may not be unique
|
|
71
73
|
/* eslint-disable react/no-array-index-key */
|
|
72
|
-
|
|
73
74
|
function renderPathString(_ref) {
|
|
74
75
|
let {
|
|
75
76
|
path
|
|
76
77
|
} = _ref;
|
|
77
78
|
return path.reduce((result, pathName, index) => {
|
|
78
|
-
return result.concat(
|
|
79
|
+
return result.concat(/*#__PURE__*/React.createElement("span", {
|
|
79
80
|
key: `${pathName}-${index}`
|
|
80
81
|
}, /*#__PURE__*/React.createElement(Text, null, index > 0 ? /*#__PURE__*/React.createElement(IconMiniArrowEndLine, null) : null, pathName)));
|
|
81
82
|
}, []);
|
|
82
83
|
}
|
|
83
84
|
/* eslint-enable react/no-array-index-key */
|
|
84
85
|
|
|
85
|
-
|
|
86
86
|
function emptyTagIcon() {
|
|
87
87
|
return /*#__PURE__*/React.createElement(SVGIcon, {
|
|
88
88
|
viewBox: "0 0 24 24",
|
|
@@ -96,13 +96,11 @@ function emptyTagIcon() {
|
|
|
96
96
|
fontSize: "16"
|
|
97
97
|
}, "</>")));
|
|
98
98
|
}
|
|
99
|
-
|
|
100
99
|
function findFocusable(el) {
|
|
101
100
|
// eslint-disable-next-line react/no-find-dom-node
|
|
102
101
|
const element = ReactDOM.findDOMNode(el);
|
|
103
102
|
return element ? Array.from(element.querySelectorAll('[tabindex]')) : [];
|
|
104
103
|
}
|
|
105
|
-
|
|
106
104
|
export default function StatusBar(props) {
|
|
107
105
|
const [focusedBtnId, setFocusedBtnId] = useState(null);
|
|
108
106
|
const [includeEdtrDesc, setIncludeEdtrDesc] = useState(false);
|
|
@@ -117,10 +115,9 @@ export default function StatusBar(props) {
|
|
|
117
115
|
// move focus to the next button over.
|
|
118
116
|
if (isHtmlView() && /rce-kbshortcut-btn|rce-a11y-btn/.test(focusedBtnId)) {
|
|
119
117
|
setFocusedBtnId('rce-edit-btn');
|
|
120
|
-
}
|
|
118
|
+
}
|
|
119
|
+
// adding a delay before including the HTML Editor description to wait the focus moves to the RCE
|
|
121
120
|
// and prevent JAWS from reading the aria-describedby element when switching back to RCE view
|
|
122
|
-
|
|
123
|
-
|
|
124
121
|
const timerid = setTimeout(() => {
|
|
125
122
|
setIncludeEdtrDesc(!isHtmlView());
|
|
126
123
|
}, 100);
|
|
@@ -130,26 +127,21 @@ export default function StatusBar(props) {
|
|
|
130
127
|
function isAvailable(plugin) {
|
|
131
128
|
return !props.disabledPlugins.includes(plugin);
|
|
132
129
|
}
|
|
133
|
-
|
|
134
130
|
function isFeature(feature_name) {
|
|
135
131
|
return props.features.includes(feature_name);
|
|
136
132
|
}
|
|
137
|
-
|
|
138
133
|
function preferredHtmlEditor() {
|
|
139
134
|
if (props.preferredHtmlEditor) return props.preferredHtmlEditor;
|
|
140
135
|
return PRETTY_HTML_EDITOR_VIEW;
|
|
141
136
|
}
|
|
142
|
-
|
|
143
137
|
function getHtmlEditorView(event) {
|
|
144
138
|
if (!event.shiftKey) return preferredHtmlEditor();
|
|
145
139
|
return preferredHtmlEditor() === RAW_HTML_EDITOR_VIEW ? PRETTY_HTML_EDITOR_VIEW : RAW_HTML_EDITOR_VIEW;
|
|
146
140
|
}
|
|
147
|
-
|
|
148
141
|
function handleKey(event) {
|
|
149
142
|
const buttons = findFocusable(statusBarRef.current).filter(b => !b.disabled);
|
|
150
143
|
const focusedIndex = buttons.findIndex(b => b.getAttribute('data-btn-id') === focusedBtnId);
|
|
151
144
|
let newFocusedIndex;
|
|
152
|
-
|
|
153
145
|
if (event.keyCode === keycode.codes.right) {
|
|
154
146
|
newFocusedIndex = (focusedIndex + 1) % buttons.length;
|
|
155
147
|
} else if (event.keyCode === keycode.codes.left) {
|
|
@@ -157,20 +149,16 @@ export default function StatusBar(props) {
|
|
|
157
149
|
} else {
|
|
158
150
|
return;
|
|
159
151
|
}
|
|
160
|
-
|
|
161
152
|
buttons[newFocusedIndex].focus();
|
|
162
153
|
setFocusedBtnId(buttons[newFocusedIndex].getAttribute('data-btn-id'));
|
|
163
154
|
}
|
|
164
|
-
|
|
165
155
|
function isHtmlView() {
|
|
166
156
|
return props.editorView !== WYSIWYG_VIEW;
|
|
167
157
|
}
|
|
168
|
-
|
|
169
158
|
function tabIndexForBtn(itemId) {
|
|
170
159
|
const tabindex = focusedBtnId === itemId ? 0 : -1;
|
|
171
160
|
return tabindex;
|
|
172
161
|
}
|
|
173
|
-
|
|
174
162
|
function renderPath() {
|
|
175
163
|
return /*#__PURE__*/React.createElement(View, {
|
|
176
164
|
"data-testid": "whole-status-bar-path",
|
|
@@ -179,7 +167,6 @@ export default function StatusBar(props) {
|
|
|
179
167
|
}
|
|
180
168
|
}, renderPathString(props));
|
|
181
169
|
}
|
|
182
|
-
|
|
183
170
|
function renderA11yButton() {
|
|
184
171
|
const a11y = formatMessage('Accessibility Checker');
|
|
185
172
|
const a11yButtonId = 'rce-a11y-btn';
|
|
@@ -197,11 +184,9 @@ export default function StatusBar(props) {
|
|
|
197
184
|
withBackground: false,
|
|
198
185
|
withBorder: false
|
|
199
186
|
}, /*#__PURE__*/React.createElement(IconA11yLine, null));
|
|
200
|
-
|
|
201
187
|
if (props.a11yErrorsCount <= 0) {
|
|
202
188
|
return button;
|
|
203
189
|
}
|
|
204
|
-
|
|
205
190
|
return /*#__PURE__*/React.createElement(InstUISettingsProvider, {
|
|
206
191
|
theme: {
|
|
207
192
|
componentOverrides: {
|
|
@@ -215,7 +200,6 @@ export default function StatusBar(props) {
|
|
|
215
200
|
countUntil: 100
|
|
216
201
|
}, button));
|
|
217
202
|
}
|
|
218
|
-
|
|
219
203
|
function renderHtmlEditorMessage() {
|
|
220
204
|
const message = props.editorView === PRETTY_HTML_EDITOR_VIEW ? formatMessage('Sadly, the pretty HTML editor is not keyboard accessible. Access the raw HTML editor here.') : formatMessage('Access the pretty HTML editor');
|
|
221
205
|
const label = props.editorView === PRETTY_HTML_EDITOR_VIEW ? formatMessage('Switch to raw HTML Editor') : formatMessage('Switch to pretty HTML Editor');
|
|
@@ -238,7 +222,6 @@ export default function StatusBar(props) {
|
|
|
238
222
|
onFocus: () => setFocusedBtnId('rce-editormessage-btn')
|
|
239
223
|
}, label));
|
|
240
224
|
}
|
|
241
|
-
|
|
242
225
|
function renderIconButtons() {
|
|
243
226
|
if (isHtmlView()) return null;
|
|
244
227
|
const ai_tools = isFeature('ai_tools');
|
|
@@ -257,7 +240,6 @@ export default function StatusBar(props) {
|
|
|
257
240
|
tabIndex: tabIndexForBtn('rce-ai-btn'),
|
|
258
241
|
onClick: event => {
|
|
259
242
|
event.target.focus(); // FF doesn't focus buttons on click
|
|
260
|
-
|
|
261
243
|
props.onAI();
|
|
262
244
|
},
|
|
263
245
|
onFocus: () => setFocusedBtnId('rce-ai-btn'),
|
|
@@ -279,7 +261,6 @@ export default function StatusBar(props) {
|
|
|
279
261
|
tabIndex: tabIndexForBtn('rce-kbshortcut-btn'),
|
|
280
262
|
onClick: event => {
|
|
281
263
|
event.target.focus(); // FF doesn't focus buttons on click
|
|
282
|
-
|
|
283
264
|
props.onKBShortcutModalOpen();
|
|
284
265
|
},
|
|
285
266
|
onFocus: () => setFocusedBtnId('rce-kbshortcut-btn'),
|
|
@@ -288,7 +269,6 @@ export default function StatusBar(props) {
|
|
|
288
269
|
withBorder: false
|
|
289
270
|
}, /*#__PURE__*/React.createElement(IconKeyboardShortcutsLine, null)), a11y_checker && !props.readOnly && isAvailable('ally_checker') && renderA11yButton());
|
|
290
271
|
}
|
|
291
|
-
|
|
292
272
|
function renderWordCount() {
|
|
293
273
|
if (isHtmlView()) return null;
|
|
294
274
|
const wordCount = formatMessage(`{count, plural,
|
|
@@ -312,17 +292,14 @@ export default function StatusBar(props) {
|
|
|
312
292
|
title: formatMessage('View word and character counts')
|
|
313
293
|
}, wordCount)));
|
|
314
294
|
}
|
|
315
|
-
|
|
316
295
|
function renderSection3(html_view, fullscreen, resize_handle) {
|
|
317
296
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
318
297
|
className: css(styles.separator)
|
|
319
298
|
}), html_view && renderToggleHtml(), fullscreen && renderFullscreen(), resize_handle && renderResizeHandle());
|
|
320
299
|
}
|
|
321
|
-
|
|
322
300
|
function descMsg() {
|
|
323
301
|
return preferredHtmlEditor() === RAW_HTML_EDITOR_VIEW ? formatMessage('Shift-O to open the pretty html editor.') : formatMessage('The pretty html editor is not keyboard accessible. Press Shift O to open the raw html editor.');
|
|
324
302
|
}
|
|
325
|
-
|
|
326
303
|
function renderToggleHtml() {
|
|
327
304
|
const toggleToHtml = formatMessage('Switch to the html editor');
|
|
328
305
|
const toggleToRich = formatMessage('Switch to the rich text editor');
|
|
@@ -358,16 +335,13 @@ export default function StatusBar(props) {
|
|
|
358
335
|
id: "edit-button-desc"
|
|
359
336
|
}, descMsg()));
|
|
360
337
|
}
|
|
361
|
-
|
|
362
338
|
function renderFullscreen() {
|
|
363
339
|
if (props.readOnly) return null;
|
|
364
340
|
if (!document[FS_ENABLED]) return null;
|
|
365
|
-
|
|
366
341
|
if (props.editorView === RAW_HTML_EDITOR_VIEW && !('requestFullscreen' in document.body)) {
|
|
367
342
|
// this is safari, which refuses to fullscreen a textarea
|
|
368
343
|
return null;
|
|
369
344
|
}
|
|
370
|
-
|
|
371
345
|
const fullscreen = props.rceIsFullscreen ? formatMessage('Exit Fullscreen') : formatMessage('Fullscreen');
|
|
372
346
|
return /*#__PURE__*/React.createElement(IconButton, {
|
|
373
347
|
"data-btn-id": "rce-fullscreen-btn",
|
|
@@ -384,7 +358,6 @@ export default function StatusBar(props) {
|
|
|
384
358
|
withBorder: false
|
|
385
359
|
}, props.rceIsFullscreen ? /*#__PURE__*/React.createElement(IconExitFullScreenLine, null) : /*#__PURE__*/React.createElement(IconFullScreenLine, null));
|
|
386
360
|
}
|
|
387
|
-
|
|
388
361
|
function renderResizeHandle() {
|
|
389
362
|
if (props.rceIsFullscreen) return null;
|
|
390
363
|
return /*#__PURE__*/React.createElement(ResizeHandle, {
|
|
@@ -396,7 +369,6 @@ export default function StatusBar(props) {
|
|
|
396
369
|
}
|
|
397
370
|
});
|
|
398
371
|
}
|
|
399
|
-
|
|
400
372
|
const flexJustify = isHtmlView() ? 'end' : 'start';
|
|
401
373
|
const html_view = isFeature('html_view') && isAvailable('instructure_html_view');
|
|
402
374
|
const fullscreen = isFeature('fullscreen') && isAvailable('instructure_fullscreen');
|
|
@@ -406,7 +378,6 @@ export default function StatusBar(props) {
|
|
|
406
378
|
componentOverrides: {
|
|
407
379
|
IconButton: {
|
|
408
380
|
secondaryGhostColor: 'rgb(34, 47, 62)' // to match tinymce's button color
|
|
409
|
-
|
|
410
381
|
}
|
|
411
382
|
}
|
|
412
383
|
}
|
package/es/rce/alertHandler.js
CHANGED
|
@@ -28,19 +28,16 @@ export class AlertHandler {
|
|
|
28
28
|
if (this.alertFunc == null) {
|
|
29
29
|
throw new Error('Tried to alert without alertFunc being set first');
|
|
30
30
|
}
|
|
31
|
-
|
|
32
31
|
this.alertFunc(alert);
|
|
33
32
|
};
|
|
34
|
-
|
|
35
33
|
this.alertFunc = alertFunc;
|
|
36
34
|
}
|
|
35
|
+
|
|
37
36
|
/**
|
|
38
37
|
* Calls the registered alertFunc assuming one has been set, otherwise
|
|
39
38
|
* it throws.
|
|
40
39
|
*
|
|
41
40
|
* @memberof AlertHandler
|
|
42
41
|
*/
|
|
43
|
-
|
|
44
|
-
|
|
45
42
|
}
|
|
46
43
|
export default new AlertHandler();
|