@instructure/canvas-rce 5.14.0 → 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 +33 -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/__tests__/sidebar/reducers/all_files.test.js +28 -0
- package/babel.config.js +3 -1
- package/build.sh +7 -7
- 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 +25 -38
- 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/plugins/instructure_rce_external_tools/constants.js +28 -0
- 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 +43 -63
- 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 +77 -82
- package/scripts/build-canvas +2 -1
- package/scripts/build.js +4 -4
- package/scripts/publish_to_npm.sh +1 -1
- 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/common/components/FileTree/File.js +0 -64
- package/es/common/components/FileTree/Folder.js +0 -110
- package/es/common/components/FileTree/index.js +0 -84
- package/es/common/components/FileTree/styles.js +0 -72
- package/es/common/components/Loading.js +0 -83
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import _pt from "prop-types";
|
|
2
|
-
|
|
3
2
|
/*
|
|
4
3
|
* Copyright (C) 2019 - present Instructure, Inc.
|
|
5
4
|
*
|
|
@@ -17,10 +16,12 @@ import _pt from "prop-types";
|
|
|
17
16
|
* You should have received a copy of the GNU Affero General Public License along
|
|
18
17
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
19
18
|
*/
|
|
19
|
+
|
|
20
20
|
import React, { useEffect, useRef, useState } from 'react';
|
|
21
21
|
import { Button, CloseButton } from '@instructure/ui-buttons';
|
|
22
22
|
import { Flex } from '@instructure/ui-flex';
|
|
23
23
|
import { Heading } from '@instructure/ui-heading';
|
|
24
|
+
import { IconWarningSolid } from '@instructure/ui-icons';
|
|
24
25
|
import { getTrayHeight } from '../../shared/trayUtils';
|
|
25
26
|
import { View } from '@instructure/ui-view';
|
|
26
27
|
import { instuiPopupMountNode } from '../../../../util/fullscreenHelpers';
|
|
@@ -50,23 +51,20 @@ export default function FindReplaceTray(_ref) {
|
|
|
50
51
|
const [alertReplaceText, setAlertReplaceText] = useState('');
|
|
51
52
|
const trayRef = useRef(null);
|
|
52
53
|
const liveRegionKey = useRef(0);
|
|
53
|
-
const srDupKey = useRef(0);
|
|
54
|
-
|
|
54
|
+
const srDupKey = useRef(0);
|
|
55
|
+
// moves RCE when tray opens/closes, copied from CanvasContentTray
|
|
55
56
|
useEffect(() => {
|
|
56
57
|
var _trayRef$current;
|
|
57
|
-
|
|
58
58
|
if (!hasOpened) return;
|
|
59
59
|
let c = document.querySelector('[role="main"]');
|
|
60
60
|
let target_w = 0;
|
|
61
61
|
if (!c) return;
|
|
62
62
|
const margin = window.getComputedStyle(c).direction === 'ltr' ? document.body.getBoundingClientRect().right - c.getBoundingClientRect().right : c.getBoundingClientRect().left;
|
|
63
63
|
target_w = c.offsetWidth - ((_trayRef$current = trayRef.current) === null || _trayRef$current === void 0 ? void 0 : _trayRef$current.offsetWidth) + margin;
|
|
64
|
-
|
|
65
64
|
if (target_w >= 320 && target_w < c.offsetWidth) {
|
|
66
65
|
c.style.boxSizing = 'border-box';
|
|
67
66
|
c.style.width = `${target_w}px`;
|
|
68
67
|
}
|
|
69
|
-
|
|
70
68
|
return () => {
|
|
71
69
|
c = document.querySelector('[role="main"]');
|
|
72
70
|
if (!c) return;
|
|
@@ -76,10 +74,9 @@ export default function FindReplaceTray(_ref) {
|
|
|
76
74
|
useEffect(() => {
|
|
77
75
|
if (initialText) {
|
|
78
76
|
onFind(initialText);
|
|
79
|
-
}
|
|
80
|
-
|
|
77
|
+
}
|
|
78
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
81
79
|
}, []);
|
|
82
|
-
|
|
83
80
|
function usePrevious(value) {
|
|
84
81
|
const ref = useRef();
|
|
85
82
|
useEffect(() => {
|
|
@@ -87,7 +84,6 @@ export default function FindReplaceTray(_ref) {
|
|
|
87
84
|
}, [value]);
|
|
88
85
|
return ref.current;
|
|
89
86
|
}
|
|
90
|
-
|
|
91
87
|
const prepend = selectionContext[0];
|
|
92
88
|
const append = selectionContext[1];
|
|
93
89
|
const srContextMsg = formatMessage('{prepend}{findText}{append}', {
|
|
@@ -97,15 +93,12 @@ export default function FindReplaceTray(_ref) {
|
|
|
97
93
|
});
|
|
98
94
|
const previousSrMsg = usePrevious(srContextMsg);
|
|
99
95
|
const previousFindText = usePrevious(findText);
|
|
100
|
-
|
|
101
96
|
const handleTextChange = e => {
|
|
102
97
|
setFindText(e.target.value);
|
|
103
98
|
onFind(e.target.value);
|
|
104
99
|
};
|
|
105
|
-
|
|
106
100
|
const handleFindKeyDown = e => {
|
|
107
101
|
if (e.key !== 'Enter') return;
|
|
108
|
-
|
|
109
102
|
if (e.shiftKey) {
|
|
110
103
|
if (isButtonDisabled('previous')) return;
|
|
111
104
|
onPrevious();
|
|
@@ -115,33 +108,27 @@ export default function FindReplaceTray(_ref) {
|
|
|
115
108
|
onFind(findText);
|
|
116
109
|
return;
|
|
117
110
|
}
|
|
118
|
-
|
|
119
111
|
if (isButtonDisabled('next')) return;
|
|
120
112
|
onNext();
|
|
121
113
|
}
|
|
122
114
|
};
|
|
123
|
-
|
|
124
115
|
const handleReplaceKeyDown = e => {
|
|
125
116
|
if (e.key !== 'Enter') return;
|
|
126
117
|
if (isButtonDisabled('replace')) return;
|
|
127
118
|
const forward = !e.shiftKey;
|
|
128
119
|
replace(replaceText, forward, false);
|
|
129
120
|
};
|
|
130
|
-
|
|
131
121
|
const replace = (newText, forward, all) => {
|
|
132
122
|
onReplace(newText, forward, all);
|
|
133
|
-
|
|
134
123
|
if (all) {
|
|
135
124
|
setShowReplaceAlert('replaceAll');
|
|
136
125
|
} else {
|
|
137
126
|
setShowReplaceAlert('replace');
|
|
138
127
|
}
|
|
139
|
-
|
|
140
128
|
setAlertFindText(findText);
|
|
141
129
|
setAlertReplaceText(newText);
|
|
142
130
|
liveRegionKey.current++;
|
|
143
131
|
};
|
|
144
|
-
|
|
145
132
|
const alertText = showReplaceAlert === '' ? '' : showReplaceAlert === 'replace' ? formatMessage('Replaced {alertFindText} with {alertReplaceText}', {
|
|
146
133
|
alertFindText,
|
|
147
134
|
alertReplaceText
|
|
@@ -149,13 +136,11 @@ export default function FindReplaceTray(_ref) {
|
|
|
149
136
|
alertFindText,
|
|
150
137
|
alertReplaceText
|
|
151
138
|
});
|
|
152
|
-
|
|
153
139
|
const renderReplaceAlert = () => {
|
|
154
140
|
if (!showReplaceAlert) {
|
|
155
141
|
liveRegionKey.current = 0;
|
|
156
142
|
return /*#__PURE__*/React.createElement(React.Fragment, null);
|
|
157
143
|
}
|
|
158
|
-
|
|
159
144
|
return /*#__PURE__*/React.createElement(Alert, {
|
|
160
145
|
variant: "success",
|
|
161
146
|
renderCloseButtonLabel: "Close Alert",
|
|
@@ -165,26 +150,31 @@ export default function FindReplaceTray(_ref) {
|
|
|
165
150
|
timeout: 3000
|
|
166
151
|
}, alertText);
|
|
167
152
|
};
|
|
168
|
-
|
|
169
153
|
const renderScreenReaderAlert = () => {
|
|
170
154
|
return /*#__PURE__*/React.createElement(ScreenReaderContent, null, alertText);
|
|
171
155
|
};
|
|
172
|
-
|
|
173
|
-
|
|
156
|
+
const errMsg = /*#__PURE__*/React.createElement(Flex, {
|
|
157
|
+
gap: "xx-small",
|
|
158
|
+
alignItems: "center"
|
|
159
|
+
}, /*#__PURE__*/React.createElement(IconWarningSolid, {
|
|
160
|
+
color: "error",
|
|
161
|
+
"data-testid": "error-icon"
|
|
162
|
+
}), /*#__PURE__*/React.createElement(Text, {
|
|
163
|
+
color: "danger",
|
|
164
|
+
size: "small"
|
|
165
|
+
}, formatMessage('No results found')));
|
|
174
166
|
const messages = findText && max === 0 ? [{
|
|
175
167
|
text: errMsg,
|
|
176
168
|
type: 'error'
|
|
177
169
|
}] : [];
|
|
178
|
-
|
|
179
170
|
const resultText = () => {
|
|
180
|
-
const srErrMsg = messages.length === 0 ? '' : errMsg;
|
|
181
|
-
|
|
171
|
+
const srErrMsg = messages.length === 0 ? '' : errMsg;
|
|
172
|
+
// resolves issue where focus is lost when this (dis)appears
|
|
182
173
|
if (max === 0) {
|
|
183
174
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ScreenReaderContent, {
|
|
184
175
|
"aria-live": "polite"
|
|
185
176
|
}, srErrMsg), /*#__PURE__*/React.createElement(Text, null));
|
|
186
177
|
}
|
|
187
|
-
|
|
188
178
|
const msg = formatMessage('{index} of {max}', {
|
|
189
179
|
index,
|
|
190
180
|
max
|
|
@@ -192,12 +182,12 @@ export default function FindReplaceTray(_ref) {
|
|
|
192
182
|
const srResultMsg = formatMessage('Result {index} of {max}.', {
|
|
193
183
|
index,
|
|
194
184
|
max
|
|
195
|
-
});
|
|
185
|
+
});
|
|
196
186
|
|
|
187
|
+
// necessary to force screen reader to read the same message while typing
|
|
197
188
|
if (srContextMsg === previousSrMsg && previousFindText != findText) {
|
|
198
189
|
srDupKey.current++;
|
|
199
190
|
} else srDupKey.current = 0;
|
|
200
|
-
|
|
201
191
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(View, {
|
|
202
192
|
as: "span",
|
|
203
193
|
key: srDupKey.current,
|
|
@@ -208,24 +198,19 @@ export default function FindReplaceTray(_ref) {
|
|
|
208
198
|
"aria-hidden": "true"
|
|
209
199
|
}, msg));
|
|
210
200
|
};
|
|
211
|
-
|
|
212
201
|
const isButtonDisabled = button => {
|
|
213
202
|
switch (button) {
|
|
214
203
|
case 'next':
|
|
215
204
|
case 'previous':
|
|
216
205
|
return max < 2;
|
|
217
|
-
|
|
218
206
|
case 'replace':
|
|
219
207
|
return !replaceText || index === 0;
|
|
220
|
-
|
|
221
208
|
case 'replaceAll':
|
|
222
209
|
return !replaceText || max < 2 || index === 0;
|
|
223
|
-
|
|
224
210
|
default:
|
|
225
211
|
return false;
|
|
226
212
|
}
|
|
227
213
|
};
|
|
228
|
-
|
|
229
214
|
return /*#__PURE__*/React.createElement(Tray, {
|
|
230
215
|
"data-mce-component": true,
|
|
231
216
|
label: formatMessage('Find and Replace'),
|
package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import _pt from "prop-types";
|
|
2
|
-
|
|
3
2
|
/*
|
|
4
3
|
* Copyright (C) 2019 - present Instructure, Inc.
|
|
5
4
|
*
|
|
@@ -17,6 +16,7 @@ import _pt from "prop-types";
|
|
|
17
16
|
* You should have received a copy of the GNU Affero General Public License along
|
|
18
17
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
19
18
|
*/
|
|
19
|
+
|
|
20
20
|
import React, { useState } from 'react';
|
|
21
21
|
import FindReplaceTray from './FindReplaceTray';
|
|
22
22
|
export default function FindReplaceTrayController(_ref) {
|
|
@@ -31,15 +31,12 @@ export default function FindReplaceTrayController(_ref) {
|
|
|
31
31
|
const [findIndex, setFindIndex] = useState(0);
|
|
32
32
|
const [findCount, setFindCount] = useState(0);
|
|
33
33
|
const [selectionContext, setSelectionContext] = useState(['', '']);
|
|
34
|
-
|
|
35
34
|
const updateSelectionContext = () => {
|
|
36
35
|
const srText = getSelectionContext();
|
|
37
36
|
setSelectionContext(srText);
|
|
38
37
|
};
|
|
39
|
-
|
|
40
38
|
const newFindIndex = direction => {
|
|
41
39
|
let newIndex = 0;
|
|
42
|
-
|
|
43
40
|
if (findCount === 0) {
|
|
44
41
|
newIndex = 0;
|
|
45
42
|
} else if (direction === 1) {
|
|
@@ -53,34 +50,28 @@ export default function FindReplaceTrayController(_ref) {
|
|
|
53
50
|
newIndex = findCount;
|
|
54
51
|
} else newIndex = findIndex - 1;
|
|
55
52
|
}
|
|
56
|
-
|
|
57
53
|
return newIndex;
|
|
58
54
|
};
|
|
59
|
-
|
|
60
55
|
const done = () => {
|
|
61
56
|
plugin.done(false);
|
|
62
57
|
setFindCount(0);
|
|
63
58
|
setFindIndex(0);
|
|
64
59
|
setSelectionContext([]);
|
|
65
60
|
};
|
|
66
|
-
|
|
67
61
|
const handleDismiss = () => {
|
|
68
62
|
done();
|
|
69
63
|
onDismiss();
|
|
70
64
|
};
|
|
71
|
-
|
|
72
65
|
const handleNext = () => {
|
|
73
66
|
plugin.next();
|
|
74
67
|
setFindIndex(newFindIndex(1));
|
|
75
68
|
updateSelectionContext();
|
|
76
69
|
};
|
|
77
|
-
|
|
78
70
|
const handlePrevious = () => {
|
|
79
71
|
plugin.prev();
|
|
80
72
|
setFindIndex(newFindIndex(-1));
|
|
81
73
|
updateSelectionContext();
|
|
82
74
|
};
|
|
83
|
-
|
|
84
75
|
const handleFind = text => {
|
|
85
76
|
if (!text) {
|
|
86
77
|
done();
|
|
@@ -92,34 +83,28 @@ export default function FindReplaceTrayController(_ref) {
|
|
|
92
83
|
updateSelectionContext();
|
|
93
84
|
}
|
|
94
85
|
};
|
|
95
|
-
|
|
96
86
|
const handleReplace = function (text) {
|
|
97
87
|
let forward = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
98
88
|
let all = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
99
89
|
if (!text) return;
|
|
100
90
|
undoManager === null || undoManager === void 0 ? void 0 : undoManager.add();
|
|
101
91
|
plugin.replace(text, forward, all);
|
|
102
|
-
|
|
103
92
|
if (findCount === 1 || all) {
|
|
104
93
|
done();
|
|
105
94
|
return;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
|
|
95
|
+
}
|
|
96
|
+
// we can't just find again, because that will reset index to 1
|
|
109
97
|
let newIndex;
|
|
110
98
|
const newFindCount = findCount - 1;
|
|
111
|
-
|
|
112
99
|
if (forward) {
|
|
113
100
|
newIndex = findIndex === findCount ? 1 : findIndex;
|
|
114
101
|
} else {
|
|
115
102
|
newIndex = findIndex === 1 ? newFindCount : findIndex - 1;
|
|
116
103
|
}
|
|
117
|
-
|
|
118
104
|
setFindCount(newFindCount);
|
|
119
105
|
setFindIndex(newIndex);
|
|
120
106
|
updateSelectionContext();
|
|
121
107
|
};
|
|
122
|
-
|
|
123
108
|
return /*#__PURE__*/React.createElement(FindReplaceTray, {
|
|
124
109
|
onRequestClose: handleDismiss,
|
|
125
110
|
onNext: handleNext,
|
|
@@ -15,49 +15,42 @@
|
|
|
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
|
-
const NUMBER_OF_WORDS = 10;
|
|
19
18
|
|
|
19
|
+
const NUMBER_OF_WORDS = 10;
|
|
20
20
|
const countWords = text => {
|
|
21
21
|
// ignore text before the first whitespace because it is part of the selected text
|
|
22
22
|
const countText = text.split(/\s+/).slice(1).join(' ');
|
|
23
23
|
const count = countText.trim().split(/\s+/).length;
|
|
24
24
|
return count;
|
|
25
25
|
};
|
|
26
|
-
|
|
27
26
|
const getAfterText = startingElement => {
|
|
28
27
|
let text = '';
|
|
29
28
|
let element = startingElement.nextSibling;
|
|
30
|
-
|
|
31
29
|
while (element) {
|
|
32
30
|
text += element.textContent;
|
|
33
31
|
element = element.nextSibling;
|
|
34
32
|
}
|
|
35
|
-
|
|
36
33
|
if (text.includes('.')) {
|
|
37
34
|
const index = text.indexOf('.');
|
|
38
35
|
text = text.substring(0, index + 1);
|
|
39
36
|
}
|
|
40
|
-
|
|
41
37
|
if (countWords(text) > NUMBER_OF_WORDS) {
|
|
42
38
|
text = text.split(/\s+/).slice(0, NUMBER_OF_WORDS + 1).join(' ');
|
|
43
39
|
}
|
|
44
|
-
|
|
45
40
|
return text;
|
|
46
41
|
};
|
|
47
|
-
|
|
48
42
|
const getBeforeText = (startingElement, wordCount) => {
|
|
49
43
|
let text = '';
|
|
50
44
|
let element = startingElement.previousSibling;
|
|
51
|
-
|
|
52
45
|
while (element) {
|
|
53
46
|
text = element.textContent + text;
|
|
54
47
|
element = element.previousSibling;
|
|
55
48
|
}
|
|
56
|
-
|
|
57
49
|
text = text.split(/\s+/).slice(-wordCount - 1).join(' ');
|
|
58
50
|
return text;
|
|
59
51
|
};
|
|
60
52
|
|
|
53
|
+
// eslint-disable-next-line no-undef
|
|
61
54
|
export const getSelectionContext = elements => {
|
|
62
55
|
const firstSelected = elements[0];
|
|
63
56
|
const lastSelected = elements[elements.length - 1];
|
|
@@ -15,19 +15,17 @@
|
|
|
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 tinymce from 'tinymce';
|
|
19
20
|
import formatMessage from '../../../format-message';
|
|
20
21
|
import clickCallback from './clickCallback';
|
|
21
22
|
tinymce.PluginManager.add('instructure_search_and_replace', function (editor) {
|
|
22
23
|
var _editor$plugins;
|
|
23
|
-
|
|
24
24
|
// We use the searchreplace plugins API
|
|
25
25
|
if (!((_editor$plugins = editor.plugins) !== null && _editor$plugins !== void 0 && _editor$plugins.searchreplace)) return;
|
|
26
|
-
|
|
27
26
|
const launchFindModal = ed => () => {
|
|
28
27
|
clickCallback(ed, document);
|
|
29
28
|
};
|
|
30
|
-
|
|
31
29
|
editor.addCommand('launch_instructure_search_and_replace', launchFindModal(editor));
|
|
32
30
|
editor.ui.registry.addMenuItem('instructure_search_and_replace', {
|
|
33
31
|
text: formatMessage('Find and Replace'),
|
|
@@ -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 tinymce from 'tinymce';
|
|
19
20
|
import { isStudioEmbeddedMedia, handleBeforeObjectSelected } from '../shared/StudioLtiSupportUtils';
|
|
20
21
|
import VideoTrayController from '../instructure_record/VideoOptionsTray/TrayController';
|
|
@@ -25,7 +26,6 @@ tinymce.PluginManager.add('instructure_studio_media_options', function (ed) {
|
|
|
25
26
|
onAction() {
|
|
26
27
|
studioTrayController.showTrayForEditor(ed);
|
|
27
28
|
},
|
|
28
|
-
|
|
29
29
|
text: formatMessage('Studio Media Options'),
|
|
30
30
|
tooltip: formatMessage('Show Studio media options')
|
|
31
31
|
});
|
|
@@ -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 { generateRows, HEADERS } from './utils/tableContent';
|
|
@@ -25,22 +26,18 @@ export default function (ed, document, options) {
|
|
|
25
26
|
WordCountModal
|
|
26
27
|
} = _ref;
|
|
27
28
|
let container = document.querySelector(`#${MODAL_ID}`);
|
|
28
|
-
|
|
29
29
|
if (!container) {
|
|
30
30
|
container = document.createElement('div');
|
|
31
31
|
container.id = MODAL_ID;
|
|
32
32
|
document.body.appendChild(container);
|
|
33
33
|
}
|
|
34
|
-
|
|
35
34
|
const handleDismiss = () => {
|
|
36
35
|
if (container) {
|
|
37
36
|
ReactDOM.unmountComponentAtNode(container);
|
|
38
37
|
}
|
|
39
|
-
|
|
40
38
|
ed.focus(options.skipEditorFocus);
|
|
41
39
|
};
|
|
42
|
-
|
|
43
|
-
ReactDOM.render( /*#__PURE__*/React.createElement(WordCountModal, {
|
|
40
|
+
ReactDOM.render(/*#__PURE__*/React.createElement(WordCountModal, {
|
|
44
41
|
headers: HEADERS,
|
|
45
42
|
rows: generateRows(ed),
|
|
46
43
|
onDismiss: handleDismiss
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import _pt from "prop-types";
|
|
2
|
-
// @ts-nocheck
|
|
3
|
-
|
|
4
2
|
/*
|
|
5
3
|
* Copyright (C) 2022 - present Instructure, Inc.
|
|
6
4
|
*
|
|
@@ -18,6 +16,7 @@ import _pt from "prop-types";
|
|
|
18
16
|
* You should have received a copy of the GNU Affero General Public License along
|
|
19
17
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
18
|
*/
|
|
19
|
+
|
|
21
20
|
import React from 'react';
|
|
22
21
|
import { Modal } from '@instructure/ui-modal';
|
|
23
22
|
import { BaseButton, CloseButton } from '@instructure/ui-buttons';
|
|
@@ -25,7 +24,6 @@ import { Heading } from '@instructure/ui-heading';
|
|
|
25
24
|
import { Table } from '@instructure/ui-table';
|
|
26
25
|
import formatMessage from '../../../../format-message';
|
|
27
26
|
import { instuiPopupMountNode } from '../../../../util/fullscreenHelpers';
|
|
28
|
-
|
|
29
27
|
const renderBody = (headers, rows) => {
|
|
30
28
|
return /*#__PURE__*/React.createElement(Table, {
|
|
31
29
|
caption: formatMessage('Word Count')
|
|
@@ -55,7 +53,6 @@ const renderBody = (headers, rows) => {
|
|
|
55
53
|
}, selectionCount));
|
|
56
54
|
})));
|
|
57
55
|
};
|
|
58
|
-
|
|
59
56
|
export const WordCountModal = _ref3 => {
|
|
60
57
|
let {
|
|
61
58
|
headers,
|
|
@@ -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 tinymce from 'tinymce';
|
|
19
20
|
import formatMessage from '../../../format-message';
|
|
20
21
|
import clickCallback from './clickCallback';
|
|
@@ -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
|
export const IGNORE_WORDCOUNT_ATTRIBUTE = 'data-ignore-wordcount';
|
|
19
20
|
export const countWords = node => {
|
|
20
21
|
if (node.getAttribute(IGNORE_WORDCOUNT_ATTRIBUTE) === 'chars-only') return 0;
|
|
@@ -26,7 +27,6 @@ export const countWords = node => {
|
|
|
26
27
|
export const countCharsNoSpaces = node => {
|
|
27
28
|
const textContent = (node === null || node === void 0 ? void 0 : node.innerText) || '';
|
|
28
29
|
const matches = textContent.match(/ /g); // a single space
|
|
29
|
-
|
|
30
30
|
const spaces = matches ? matches.length : 0;
|
|
31
31
|
return countChars(node) - spaces;
|
|
32
32
|
};
|
|
@@ -34,21 +34,17 @@ export const countChars = node => {
|
|
|
34
34
|
const textContent = (node === null || node === void 0 ? void 0 : node.innerText) || '';
|
|
35
35
|
const iterator = textContent[Symbol.iterator]();
|
|
36
36
|
let count = 0;
|
|
37
|
-
|
|
38
37
|
while (!iterator.next().done) {
|
|
39
38
|
count++;
|
|
40
39
|
}
|
|
41
|
-
|
|
42
40
|
return count;
|
|
43
41
|
};
|
|
44
42
|
export const callbackForCategory = category => {
|
|
45
43
|
switch (category) {
|
|
46
44
|
case 'words':
|
|
47
45
|
return countWords;
|
|
48
|
-
|
|
49
46
|
case 'chars-no-spaces':
|
|
50
47
|
return countCharsNoSpaces;
|
|
51
|
-
|
|
52
48
|
case 'chars':
|
|
53
49
|
return countChars;
|
|
54
50
|
}
|
|
@@ -61,14 +57,11 @@ export const countShouldIgnore = (ed, scope, category) => {
|
|
|
61
57
|
};
|
|
62
58
|
export const getTinymceCount = (ed, scope, category) => {
|
|
63
59
|
const wc = ed.plugins.wordcount[scope];
|
|
64
|
-
|
|
65
60
|
switch (category) {
|
|
66
61
|
case 'words':
|
|
67
62
|
return wc.getWordCount();
|
|
68
|
-
|
|
69
63
|
case 'chars-no-spaces':
|
|
70
64
|
return wc.getCharacterCountWithoutSpaces();
|
|
71
|
-
|
|
72
65
|
case 'chars':
|
|
73
66
|
return wc.getCharacterCount();
|
|
74
67
|
}
|
|
@@ -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 { countContent } from './countContent';
|
|
19
20
|
import formatMessage from '../../../../format-message';
|
|
20
21
|
export const HEADERS = [{
|