@instructure/canvas-rce 5.14.1 → 5.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/DEVELOPMENT.md +2 -2
- package/README.md +0 -8
- package/__tests__/common/indicate.test.js +84 -0
- package/__tests__/common/mimeClass.test.js +85 -0
- package/__tests__/module/contentInsertionUtils.test.js +52 -0
- package/__tests__/module/indicatorRegion.test.js +75 -0
- package/__tests__/module/normalizeLocale.test.js +46 -0
- package/__tests__/module/normalizeProps.test.js +51 -0
- package/__tests__/module/sanitizePlugins.test.js +48 -0
- package/__tests__/module/wrapInitCb.test.js +56 -0
- package/__tests__/rcs/api.test.js +819 -0
- package/{mocha-reporter-config.js → __tests__/sidebar/actions/all_files.test.js} +10 -9
- package/__tests__/sidebar/actions/data.test.js +196 -0
- package/__tests__/sidebar/actions/utils.js +44 -0
- package/{es/rce/__mocks__/_mockStudioPlayer.js → __tests__/sidebar/reducers/all_files.test.js} +12 -4
- package/babel.config.js +3 -1
- package/es/bridge/Bridge.js +18 -73
- package/es/bridge/index.js +1 -0
- package/es/canvasFileBrowser/FileBrowser.js +21 -77
- package/es/canvasFileBrowser/en-US.js +3 -6
- package/es/common/FlashAlert.js +15 -39
- package/es/common/browser.js +4 -2
- package/es/common/fileUrl.js +105 -64
- package/es/common/incremental-loading/LoadMoreButton.js +4 -4
- package/es/common/incremental-loading/LoadingIndicator.js +1 -2
- package/es/common/incremental-loading/LoadingStatus.js +5 -13
- package/es/common/incremental-loading/index.js +1 -0
- package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
- package/es/common/indicate.js +16 -10
- package/es/common/mimeClass.js +3 -4
- package/es/common/natcompare.js +1 -4
- package/es/defaultTinymceConfig.js +5 -3
- package/es/elementDenylist.js +1 -0
- package/es/enhance-user-content/doc_previews.js +24 -35
- package/es/enhance-user-content/enhance_user_content.js +32 -67
- package/es/enhance-user-content/external_links.js +6 -9
- package/es/enhance-user-content/index.js +1 -0
- package/es/enhance-user-content/instructure_helper.js +22 -50
- package/es/enhance-user-content/jqueryish_funcs.js +8 -11
- package/es/enhance-user-content/mathml.js +48 -107
- package/es/enhance-user-content/media_comment_thumbnail.js +6 -25
- package/es/format-message.js +4 -5
- package/es/getThemeVars.js +8 -6
- package/es/getTranslations.js +1 -78
- package/es/index.d.ts +59 -0
- package/es/index.js +6 -6
- package/es/rce/AlertMessageArea.js +15 -16
- package/es/rce/DraggingBlocker.js +4 -2
- package/es/rce/KeyboardShortcutModal.js +3 -2
- package/es/rce/RCE.js +16 -17
- package/es/rce/RCEGlobals.js +12 -10
- package/es/rce/RCEVariants.js +29 -14
- package/es/rce/RCEWrapper.js +530 -641
- package/es/rce/RCEWrapper.utils.js +131 -0
- package/es/rce/RCEWrapperProps.js +9 -5
- package/es/rce/RceHtmlEditor.js +17 -19
- package/es/rce/ResizeHandle.js +4 -10
- package/es/rce/RestoreAutoSaveModal.js +1 -2
- package/es/rce/ShowOnFocusButton/index.js +2 -8
- package/es/rce/StatusBar.js +10 -44
- package/es/rce/alertHandler.js +1 -4
- package/es/rce/contentInsertion.js +36 -59
- package/es/rce/contentInsertionUtils.js +6 -8
- package/es/rce/contentRendering.js +13 -17
- package/es/rce/customEvents.js +1 -0
- package/es/rce/editorLanguage.js +23 -11
- package/es/rce/indicatorRegion.js +7 -7
- package/es/rce/normalizeLocale.js +5 -3
- package/es/rce/normalizeProps.js +7 -5
- package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
- package/es/rce/plugins/instructure_color/clickCallback.js +82 -0
- package/es/rce/plugins/instructure_color/components/ColorPicker.js +294 -0
- package/es/rce/plugins/instructure_color/components/ColorPopup.js +67 -0
- package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
- package/es/rce/plugins/instructure_color/plugin.js +40 -0
- package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
- package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +26 -25
- package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +2 -3
- package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
- package/es/rce/plugins/instructure_documents/components/Link.js +4 -20
- package/es/rce/plugins/instructure_documents/plugin.js +7 -14
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +17 -37
- package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +14 -15
- package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +6 -5
- package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +14 -8
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +13 -18
- package/es/rce/plugins/instructure_equation/MathIcon/index.js +4 -5
- package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
- package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_equation/mathlive/index.js +167 -16
- package/es/rce/plugins/instructure_equation/plugin.js +7 -10
- package/es/rce/plugins/instructure_fullscreen/plugin.js +1 -6
- package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
- package/es/rce/plugins/instructure_icon_maker/clickCallback.js +5 -8
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +47 -51
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +10 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +11 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +6 -6
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +8 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +32 -31
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +24 -35
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +32 -32
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +11 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +16 -15
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +11 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +9 -13
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +12 -13
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +33 -80
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +34 -28
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +5 -5
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +7 -8
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +5 -7
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +5 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +38 -60
- package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
- package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
- package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
- package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
- package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +2 -4
- package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
- package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
- package/es/rce/plugins/instructure_icon_maker/svg/image.js +74 -90
- package/es/rce/plugins/instructure_icon_maker/svg/index.js +17 -24
- package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/svg/settings.js +48 -58
- package/es/rce/plugins/instructure_icon_maker/svg/shape.js +5 -54
- package/es/rce/plugins/instructure_icon_maker/svg/text.js +35 -124
- package/es/rce/plugins/instructure_icon_maker/svg/utils.js +3 -11
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +4 -9
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
- package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
- package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +2 -3
- package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
- package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +9 -31
- package/es/rce/plugins/instructure_image/ImageList/Image.js +8 -14
- package/es/rce/plugins/instructure_image/ImageList/index.js +8 -10
- package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +9 -31
- package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +6 -19
- package/es/rce/plugins/instructure_image/Images/index.js +1 -3
- package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_image/plugin.js +14 -20
- package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_links/components/AccordionSection.js +8 -8
- package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
- package/es/rce/plugins/instructure_links/components/Link.js +68 -84
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +2 -23
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +3 -6
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +3 -14
- package/es/rce/plugins/instructure_links/components/LinkSet.js +32 -57
- package/es/rce/plugins/instructure_links/components/LinksPanel.js +22 -10
- package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
- package/es/rce/plugins/instructure_links/components/NoResults.js +7 -14
- package/es/rce/plugins/instructure_links/plugin.js +23 -49
- package/es/rce/plugins/instructure_links/validateURL.js +81 -36
- package/es/rce/plugins/instructure_media_embed/clickCallback.js +5 -9
- package/es/rce/plugins/instructure_media_embed/components/Embed.js +7 -7
- package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
- package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
- package/es/rce/plugins/instructure_paste/plugin.js +29 -33
- package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +31 -79
- package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +24 -83
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +39 -69
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +5 -14
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
- package/es/rce/plugins/instructure_rce_external_tools/constants.js +28 -0
- package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +20 -6
- package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
- package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +129 -136
- package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +110 -112
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +4 -21
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +5 -19
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +23 -16
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +3 -4
- package/es/rce/plugins/instructure_rce_external_tools/plugin.js +11 -20
- package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/util/externalToolsForToolbar.js +42 -0
- package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +6 -35
- package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +13 -17
- package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
- package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +16 -66
- package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +21 -35
- package/es/rce/plugins/instructure_record/clickCallback.js +32 -44
- package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
- package/es/rce/plugins/instructure_record/plugin.js +11 -18
- package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +4 -8
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +34 -51
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +12 -30
- package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
- package/es/rce/plugins/instructure_search_and_replace/plugin.js +2 -5
- package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
- package/es/rce/plugins/instructure_wordcount/clickCallback.js +5 -9
- package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +27 -37
- package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
- package/es/rce/plugins/instructure_wordcount/utils/countContent.js +4 -11
- package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +6 -8
- package/es/rce/plugins/shared/CanvasContentTray.js +29 -63
- package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
- package/es/rce/plugins/shared/ColorInput.js +27 -39
- package/es/rce/plugins/shared/ConditionalTooltip.js +6 -6
- package/es/rce/plugins/shared/ContentSelection.js +29 -78
- package/es/rce/plugins/shared/DimensionUtils.js +3 -12
- package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
- package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
- package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
- package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
- package/es/rce/plugins/shared/EventUtils.js +2 -4
- package/es/rce/plugins/shared/Filter.js +8 -38
- package/es/rce/plugins/shared/FixedContentTray.js +16 -17
- package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +4 -12
- package/es/rce/plugins/shared/ImageCropper/Modal.js +16 -20
- package/es/rce/plugins/shared/ImageCropper/Preview.js +18 -24
- package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +10 -14
- package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +4 -4
- package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +5 -15
- package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +8 -11
- package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +5 -16
- package/es/rce/plugins/shared/ImageCropper/controls/index.js +5 -5
- package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +16 -31
- package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +19 -31
- package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
- package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/svg/shape.js +5 -22
- package/es/rce/plugins/shared/ImageCropper/svg/utils.js +3 -4
- package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +20 -50
- package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
- package/es/rce/plugins/shared/ImageOptionsForm.js +18 -20
- package/es/rce/plugins/shared/LinkDisplay.js +9 -11
- package/es/rce/plugins/shared/PreviewIcon.js +9 -15
- package/es/rce/plugins/shared/Previewable.js +1 -0
- package/es/rce/plugins/shared/RceFileBrowser.js +7 -10
- package/es/rce/plugins/shared/StoreContext.js +9 -12
- package/es/rce/plugins/shared/StudioLtiSupportUtils.js +15 -12
- package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
- package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +19 -25
- package/es/rce/plugins/shared/Upload/CategoryProcessor.js +2 -3
- package/es/rce/plugins/shared/Upload/ComputerPanel.js +19 -40
- package/es/rce/plugins/shared/Upload/PanelFilter.js +10 -20
- package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
- package/es/rce/plugins/shared/Upload/UploadFile.js +32 -38
- package/es/rce/plugins/shared/Upload/UploadFileModal.js +37 -59
- package/es/rce/plugins/shared/Upload/UrlPanel.js +5 -5
- package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +25 -36
- package/es/rce/plugins/shared/Upload/doFileUpload.js +10 -13
- package/es/rce/plugins/shared/Upload/index.js +1 -0
- package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +8 -11
- package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +19 -40
- package/es/rce/plugins/shared/ai_tools/aiicons.js +3 -2
- package/es/rce/plugins/shared/ai_tools/index.js +1 -0
- package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
- package/es/rce/plugins/shared/canvasContentUtils.js +7 -11
- package/es/rce/plugins/shared/compressionUtils.js +18 -28
- package/es/rce/plugins/shared/dateUtils.js +1 -1
- package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
- package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +18 -24
- package/es/rce/plugins/shared/do-fetch-api-effect/get-cookie.js +1 -1
- package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
- package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
- package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
- package/es/rce/plugins/shared/fileShape.js +4 -9
- package/es/rce/plugins/shared/fileTypeUtils.js +34 -47
- package/es/rce/plugins/shared/fileUtils.js +1 -2
- package/es/rce/plugins/shared/linkUtils.js +1 -16
- package/es/rce/plugins/shared/round.js +2 -2
- package/es/rce/plugins/shared/trayUtils.js +7 -3
- package/es/rce/plugins/shared/useDataUrl.js +13 -14
- package/es/rce/plugins/shared/useFilterSettings.js +3 -3
- package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +4 -8
- package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +12 -72
- package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +2 -9
- package/es/rce/plugins/tinymce-a11y-checker/plugin.js +18 -24
- package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +2 -7
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +2 -6
- package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
- package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +2 -8
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
- package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
- package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +3 -30
- package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +18 -18
- package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +6 -12
- package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
- package/es/rce/root.js +17 -16
- package/es/rce/sanitizePlugins.js +1 -3
- package/es/rce/style.js +1 -4
- package/es/rce/tinyRCE.js +14 -9
- package/es/rce/tinymce.oxide.content.min.css.js +1 -0
- package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
- package/es/rce/transformContent.js +9 -11
- package/es/rce/types.js +1 -0
- package/es/rce/userOS.js +1 -1
- package/es/rce/wrapInitCb.js +50 -43
- package/es/rcs/api.js +100 -171
- package/es/rcs/buildError.js +8 -20
- package/es/rcs/fake.js +9 -20
- package/es/sidebar/actions/all_files.js +2 -0
- package/es/sidebar/actions/data.js +4 -7
- package/es/sidebar/actions/documents.js +19 -18
- package/es/sidebar/actions/files.js +21 -28
- package/es/sidebar/actions/filter.js +5 -5
- package/es/sidebar/actions/flickr.js +1 -1
- package/es/sidebar/actions/images.js +32 -37
- package/es/sidebar/actions/links.js +1 -0
- package/es/sidebar/actions/media.js +27 -28
- package/es/sidebar/actions/session.js +2 -5
- package/es/sidebar/actions/ui.js +1 -0
- package/es/sidebar/actions/upload.js +38 -74
- package/es/sidebar/containers/Sidebar.js +1 -2
- package/es/sidebar/containers/sidebarHandlers.js +9 -13
- package/es/sidebar/dragHtml.js +11 -5
- package/es/sidebar/reducers/all_files.js +5 -6
- package/es/sidebar/reducers/collection.js +12 -15
- package/es/sidebar/reducers/collections.js +6 -8
- package/es/sidebar/reducers/documents.js +7 -16
- package/es/sidebar/reducers/files.js +4 -6
- package/es/sidebar/reducers/filter.js +8 -23
- package/es/sidebar/reducers/flickr.js +10 -12
- package/es/sidebar/reducers/folder.js +16 -18
- package/es/sidebar/reducers/folders.js +4 -6
- package/es/sidebar/reducers/images.js +4 -16
- package/es/sidebar/reducers/index.js +3 -1
- package/es/sidebar/reducers/media.js +7 -16
- package/es/sidebar/reducers/newPageLinkExpanded.js +2 -5
- package/es/sidebar/reducers/noop.js +2 -2
- package/es/sidebar/reducers/rootFolderId.js +2 -5
- package/es/sidebar/reducers/session.js +4 -6
- package/es/sidebar/reducers/ui.js +6 -25
- package/es/sidebar/reducers/upload.js +16 -64
- package/es/sidebar/store/configureStore.js +1 -0
- package/es/sidebar/store/initialState.js +14 -26
- package/es/translations/locales/ab.js +1 -0
- package/es/translations/locales/ar.js +72 -8
- package/es/translations/locales/ca.js +72 -8
- package/es/translations/locales/cs.js +1 -0
- package/es/translations/locales/cs_CZ.js +1 -0
- package/es/translations/locales/cy.js +72 -8
- package/es/translations/locales/da-x-k12.js +72 -8
- package/es/translations/locales/da.js +72 -8
- package/es/translations/locales/da_DK.js +1 -0
- package/es/translations/locales/de.js +72 -8
- package/es/translations/locales/el.js +4 -0
- package/es/translations/locales/en-AU-x-unimelb.js +72 -8
- package/es/translations/locales/en-GB-x-ukhe.js +72 -8
- package/es/translations/locales/en.js +72 -8
- package/es/translations/locales/en_AU.js +72 -8
- package/es/translations/locales/en_CA.js +72 -8
- package/es/translations/locales/en_CY.js +72 -8
- package/es/translations/locales/en_GB.js +72 -8
- package/es/translations/locales/en_NZ.js +1 -0
- package/es/translations/locales/en_SE.js +1 -0
- package/es/translations/locales/en_US.js +1 -0
- package/es/translations/locales/es.js +72 -8
- package/es/translations/locales/es_ES.js +72 -8
- package/es/translations/locales/es_GT.js +1 -0
- package/es/translations/locales/fa_IR.js +7 -0
- package/es/translations/locales/fi.js +72 -8
- package/es/translations/locales/fr.js +72 -8
- package/es/translations/locales/fr_CA.js +73 -9
- package/es/translations/locales/ga.js +5 -13
- package/es/translations/locales/he.js +7 -0
- package/es/translations/locales/hi.js +72 -8
- package/es/translations/locales/ht.js +72 -8
- package/es/translations/locales/hu.js +7 -6
- package/es/translations/locales/hu_HU.js +1 -0
- package/es/translations/locales/hy.js +1 -0
- package/es/translations/locales/id.js +72 -8
- package/es/translations/locales/id_ID.js +1 -0
- package/es/translations/locales/is.js +72 -8
- package/es/translations/locales/it.js +72 -8
- package/es/translations/locales/ja.js +72 -8
- package/es/translations/locales/ko.js +1 -0
- package/es/translations/locales/ko_KR.js +1 -0
- package/es/translations/locales/lt.js +1 -0
- package/es/translations/locales/lt_LT.js +1 -0
- package/es/translations/locales/mi.js +72 -8
- package/es/translations/locales/mn_MN.js +1 -0
- package/es/translations/locales/ms.js +72 -8
- package/es/translations/locales/nb-x-k12.js +72 -8
- package/es/translations/locales/nb.js +72 -8
- package/es/translations/locales/nl.js +72 -8
- package/es/translations/locales/nl_NL.js +1 -0
- package/es/translations/locales/nn.js +7 -6
- package/es/translations/locales/pl.js +72 -8
- package/es/translations/locales/pt.js +72 -8
- package/es/translations/locales/pt_BR.js +72 -8
- package/es/translations/locales/ro.js +1 -0
- package/es/translations/locales/ru.js +72 -8
- package/es/translations/locales/se.js +1 -0
- package/es/translations/locales/sl.js +72 -8
- package/es/translations/locales/sv-x-k12.js +72 -8
- package/es/translations/locales/sv.js +72 -8
- package/es/translations/locales/sv_SE.js +1 -0
- package/es/translations/locales/tg.js +1 -0
- package/es/translations/locales/th.js +72 -8
- package/es/translations/locales/th_TH.js +1 -0
- package/es/translations/locales/tl_PH.js +1 -0
- package/es/translations/locales/tr.js +7 -0
- package/es/translations/locales/uk_UA.js +7 -0
- package/es/translations/locales/vi.js +72 -8
- package/es/translations/locales/vi_VN.js +1 -0
- package/es/translations/locales/zh-Hans.js +72 -8
- package/es/translations/locales/zh-Hant.js +72 -8
- package/es/translations/locales/zh.js +72 -8
- package/es/translations/locales/zh_HK.js +72 -8
- package/es/translations/locales/zh_TW.Big5.js +1 -0
- package/es/translations/locales/zh_TW.js +1 -0
- package/es/translations/tinymce/ar_SA.js +1 -0
- package/es/translations/tinymce/fi.js +1 -0
- package/es/translations/tinymce/ga.js +1 -0
- package/es/translations/tinymce/id.js +1 -0
- package/es/translations/tinymce/ru.js +1 -0
- package/es/translations/tinymce/ru_RU.js +1 -0
- package/es/translations/tinymce/sl.js +1 -0
- package/es/translations/tinymce/sr.js +1 -0
- package/es/translations/tinymce/th.js +1 -0
- package/es/translations/tinymce/uk_UA.js +1 -0
- package/es/translations/tinymce/vi_VN.js +1 -0
- package/es/util/TypedDict.js +4 -2
- package/es/util/elem-util.js +1 -1
- package/es/util/encrypted-storage.js +3 -13
- package/es/util/file-url-util.js +2 -7
- package/es/util/fullscreenHelpers.js +9 -9
- package/es/util/instui-icon-helper.js +4 -3
- package/es/util/loadingPlaceholder.js +39 -41
- package/es/util/simpleCache.js +1 -5
- package/es/util/string-util.js +1 -1
- package/es/util/textarea-editing-util.js +3 -7
- package/es/util/tinymce-plugin-util.js +0 -5
- package/es/util/url-util.js +20 -29
- package/eslint.config.js +250 -0
- package/jest.config.js +1 -1
- package/locales/en.json +190 -10
- package/package.json +78 -82
- package/scripts/build-canvas +2 -1
- package/scripts/build.js +4 -4
- package/scripts/installTranslations.js +7 -8
- package/testcafe/RCEWrapper.test.js +0 -1
- package/testcafe/StatusBar.test.js +0 -1
- package/testcafe/axe.test.js +3 -4
- package/testcafe/enhanceUserContent.test.js +0 -1
- package/tsconfig.json +21 -16
- package/{es/rce/__mocks__/styleMock.js → types/format-message-generate-id.d.ts} +6 -2
- package/{es/rce/plugins/shared/__mocks__/screenfull.js → types/js-beautify.d.ts} +4 -7
- package/.eslintrc +0 -45
- package/.prettierignore +0 -6
- package/es/rce/__mocks__/_mockCryptoEs.js +0 -124
- package/es/rce/__mocks__/tinymceReact.js +0 -55
- package/es/rce/plugins/tinymce-a11y-checker/rules/__mocks__/index.js +0 -53
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import formatMessage from '../../../../format-message';
|
|
19
20
|
export default function (editor) {
|
|
20
21
|
function defaultDirectionality() {
|
|
21
22
|
return document.dir;
|
|
22
23
|
}
|
|
23
|
-
|
|
24
24
|
const directionalityMenuItems = [{
|
|
25
25
|
name: 'ltr',
|
|
26
26
|
text: formatMessage('Left-to-Right'),
|
|
@@ -32,8 +32,9 @@ export default function (editor) {
|
|
|
32
32
|
cmd: 'mceDirectionRTL',
|
|
33
33
|
icon: 'rtl'
|
|
34
34
|
}];
|
|
35
|
-
if (defaultDirectionality() === 'rtl') directionalityMenuItems.reverse();
|
|
35
|
+
if (defaultDirectionality() === 'rtl') directionalityMenuItems.reverse();
|
|
36
36
|
|
|
37
|
+
// Register menu item
|
|
37
38
|
editor.ui.registry.addNestedMenuItem('directionality', {
|
|
38
39
|
text: formatMessage('Directionality'),
|
|
39
40
|
getSubmenuItems: () => [directionalityMenuItems[0].name, directionalityMenuItems[1].name]
|
|
@@ -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 formatMessage from '../../../../format-message';
|
|
19
20
|
export default function register(editor) {
|
|
20
21
|
const indentButtons = [{
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
|
|
3
1
|
/*
|
|
4
2
|
* Copyright (C) 2019 - present Instructure, Inc.
|
|
5
3
|
*
|
|
@@ -17,10 +15,19 @@
|
|
|
17
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
18
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
19
17
|
*/
|
|
18
|
+
|
|
20
19
|
import formatMessage from '../../../../format-message';
|
|
21
20
|
import { typedKeyDict } from '../../../../util/TypedDict';
|
|
22
21
|
import { listStyleForSelectionOfEditor } from '../core/ListUtils';
|
|
23
22
|
|
|
23
|
+
/**
|
|
24
|
+
* Supported list style types by the RCE
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* RCE-specific information about a list style type
|
|
29
|
+
*/
|
|
30
|
+
|
|
24
31
|
/**
|
|
25
32
|
* List of list styles supported by the RCE. These will ultimately appear in the toolbar as buttons under the main
|
|
26
33
|
* list button.
|
|
@@ -57,39 +64,39 @@ const listStyleInfos = typedKeyDict({
|
|
|
57
64
|
getTooltipText: () => formatMessage('uppercase Roman numeral ordered list')
|
|
58
65
|
}
|
|
59
66
|
}, 'listStyleType');
|
|
67
|
+
|
|
60
68
|
/**
|
|
61
69
|
* Defines the default `list-style-type` infos for the different list element types.
|
|
62
70
|
*/
|
|
63
|
-
|
|
64
71
|
const defaultStyleInfoForListType = {
|
|
65
72
|
UL: listStyleInfos.byKey.disc,
|
|
66
73
|
OL: listStyleInfos.byKey.decimal
|
|
67
74
|
};
|
|
75
|
+
|
|
68
76
|
/**
|
|
69
77
|
* Determines the inner-most list type for the selection in the given Editor.
|
|
70
78
|
*/
|
|
71
|
-
|
|
72
79
|
function listStyleInfoForSelectionOfEditor(editor) {
|
|
73
80
|
const selectedStyleType = listStyleForSelectionOfEditor(editor);
|
|
74
|
-
if (!selectedStyleType) return null;
|
|
81
|
+
if (!selectedStyleType) return null;
|
|
75
82
|
|
|
83
|
+
// Prefer to use `list-style-type`-based type infos.
|
|
76
84
|
if (selectedStyleType.listStyleType) {
|
|
85
|
+
// @ts-expect-error
|
|
77
86
|
const fromStyleType = listStyleInfos.byKey[selectedStyleType.listStyleType];
|
|
78
87
|
if (fromStyleType) return fromStyleType;
|
|
79
|
-
}
|
|
80
|
-
|
|
88
|
+
}
|
|
81
89
|
|
|
90
|
+
// Default to style based on the list element type
|
|
82
91
|
return defaultStyleInfoForListType[selectedStyleType.listType];
|
|
83
92
|
}
|
|
93
|
+
|
|
84
94
|
/**
|
|
85
95
|
* Get the button label.
|
|
86
96
|
*
|
|
87
97
|
* Note: Needs to be a function because translation files aren't loaded when top-level code runs.
|
|
88
98
|
*/
|
|
89
|
-
|
|
90
|
-
|
|
91
99
|
const getButtonLabel = () => formatMessage('Ordered and Unordered Lists');
|
|
92
|
-
|
|
93
100
|
export default function register(editor) {
|
|
94
101
|
editor.ui.registry.addSplitButton('bullist', {
|
|
95
102
|
tooltip: getButtonLabel(),
|
|
@@ -102,17 +109,16 @@ export default function register(editor) {
|
|
|
102
109
|
icon: listType.icon,
|
|
103
110
|
text: listType.getTooltipText()
|
|
104
111
|
}))),
|
|
105
|
-
onAction: () =>
|
|
106
|
-
var _listStyleInfoForSele;
|
|
107
|
-
|
|
108
|
-
return editor.execCommand(((_listStyleInfoForSele = listStyleInfoForSelectionOfEditor(editor)) === null || _listStyleInfoForSele === void 0 ? void 0 : _listStyleInfoForSele.listType) === 'OL' ? 'InsertOrderedList' : 'InsertUnorderedList');
|
|
109
|
-
},
|
|
112
|
+
onAction: () => editor.execCommand(listStyleInfoForSelectionOfEditor(editor)?.listType === 'OL' ? 'InsertOrderedList' : 'InsertUnorderedList'),
|
|
110
113
|
onItemAction: (splitButtonApi, value) => {
|
|
114
|
+
// @ts-expect-error
|
|
111
115
|
const desiredListStyleInfo = listStyleInfos.byKey[value] || defaultStyleInfoForListType.UL;
|
|
112
|
-
const currentListStyleInfo = listStyleInfoForSelectionOfEditor(editor);
|
|
116
|
+
const currentListStyleInfo = listStyleInfoForSelectionOfEditor(editor);
|
|
117
|
+
|
|
118
|
+
// When the user clicks the list button that matches the current list style in the selection,
|
|
113
119
|
// we want to interpret that as un-list-ifying the selection
|
|
114
120
|
|
|
115
|
-
if (
|
|
121
|
+
if (currentListStyleInfo?.listStyleType !== desiredListStyleInfo.listStyleType) {
|
|
116
122
|
editor.execCommand(desiredListStyleInfo.listType === 'UL' ? 'InsertUnorderedList' : 'InsertOrderedList', false, {
|
|
117
123
|
'list-style-type': desiredListStyleInfo.listStyleType
|
|
118
124
|
});
|
|
@@ -120,23 +126,18 @@ export default function register(editor) {
|
|
|
120
126
|
editor.execCommand('RemoveList');
|
|
121
127
|
}
|
|
122
128
|
},
|
|
123
|
-
select: value =>
|
|
124
|
-
var _listStyleInfoForSele2;
|
|
125
|
-
|
|
126
|
-
return ((_listStyleInfoForSele2 = listStyleInfoForSelectionOfEditor(editor)) === null || _listStyleInfoForSele2 === void 0 ? void 0 : _listStyleInfoForSele2.listStyleType) === value;
|
|
127
|
-
},
|
|
129
|
+
select: value => listStyleInfoForSelectionOfEditor(editor)?.listStyleType === value,
|
|
128
130
|
onSetup: api => {
|
|
129
131
|
// Handle updating the icon on the toolbar based on
|
|
130
132
|
// the type of list the user's selection is currently within
|
|
133
|
+
|
|
131
134
|
const $iconSvgContainer = editor.$(`.tox-split-button[aria-label="${getButtonLabel()}"] .tox-icon`, document);
|
|
132
135
|
const allIcons = editor.ui.registry.getAll().icons;
|
|
133
|
-
|
|
134
136
|
const nodeChangeHandler = () => {
|
|
135
137
|
const activeListType = listStyleInfoForSelectionOfEditor(editor);
|
|
136
138
|
api.setActive(!!activeListType);
|
|
137
|
-
$iconSvgContainer.html(allIcons[
|
|
139
|
+
$iconSvgContainer.html(allIcons[activeListType?.icon || 'list-bull-default']);
|
|
138
140
|
};
|
|
139
|
-
|
|
140
141
|
nodeChangeHandler();
|
|
141
142
|
editor.on('NodeChange', nodeChangeHandler);
|
|
142
143
|
return () => editor.off('NodeChange', nodeChangeHandler);
|
|
@@ -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 formatMessage from '../../../../format-message';
|
|
19
20
|
import { toolbarIconHelperFor } from '../../../../util/tinymce-plugin-util';
|
|
20
21
|
export default function register(editor) {
|
|
@@ -41,13 +42,11 @@ export default function register(editor) {
|
|
|
41
42
|
}))),
|
|
42
43
|
onSetup: api => {
|
|
43
44
|
const iconHelper = toolbarIconHelperFor(editor, buttonLabel);
|
|
44
|
-
|
|
45
45
|
function nodeChangeHandler() {
|
|
46
46
|
const activeStyleInfo = styleInfos.find(b => editor.formatter.match(b.icon));
|
|
47
47
|
api.setActive(!!activeStyleInfo);
|
|
48
|
-
iconHelper.updateIcon(
|
|
48
|
+
iconHelper.updateIcon(activeStyleInfo?.icon || defaultIcon);
|
|
49
49
|
}
|
|
50
|
-
|
|
51
50
|
nodeChangeHandler();
|
|
52
51
|
editor.on('NodeChange', nodeChangeHandler);
|
|
53
52
|
return () => editor.off('NodeChange', nodeChangeHandler);
|
|
@@ -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 doFileUpload from '../shared/Upload/doFileUpload';
|
|
19
20
|
export default function (ed, document) {
|
|
20
21
|
return doFileUpload(ed, document, {
|
|
@@ -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, { useRef } from 'react';
|
|
19
20
|
import { func, shape, string, oneOf } from 'prop-types';
|
|
20
21
|
import { contentTrayDocumentShape } from '../../shared/fileShape';
|
|
@@ -23,23 +24,18 @@ import { Text } from '@instructure/ui-text';
|
|
|
23
24
|
import { View } from '@instructure/ui-view';
|
|
24
25
|
import Link from './Link';
|
|
25
26
|
import { LoadMoreButton, LoadingIndicator, LoadingStatus, useIncrementalLoading } from '../../../../common/incremental-loading';
|
|
26
|
-
|
|
27
27
|
function hasFiles(documents) {
|
|
28
28
|
return documents.files.length > 0;
|
|
29
29
|
}
|
|
30
|
-
|
|
31
30
|
function isEmpty(documents) {
|
|
32
31
|
return !hasFiles(documents) && !documents.hasMore && !documents.isLoading;
|
|
33
32
|
}
|
|
34
|
-
|
|
35
33
|
function renderLinks(files, handleClick, lastItemRef) {
|
|
36
34
|
return files.map((f, index) => {
|
|
37
35
|
let focusRef = null;
|
|
38
|
-
|
|
39
36
|
if (index === files.length - 1) {
|
|
40
37
|
focusRef = lastItemRef;
|
|
41
38
|
}
|
|
42
|
-
|
|
43
39
|
return /*#__PURE__*/React.createElement(Link, Object.assign({
|
|
44
40
|
key: f.id
|
|
45
41
|
}, f, {
|
|
@@ -48,7 +44,6 @@ function renderLinks(files, handleClick, lastItemRef) {
|
|
|
48
44
|
}));
|
|
49
45
|
});
|
|
50
46
|
}
|
|
51
|
-
|
|
52
47
|
function renderLoadingError(_error) {
|
|
53
48
|
return /*#__PURE__*/React.createElement(View, {
|
|
54
49
|
as: "div",
|
|
@@ -58,7 +53,6 @@ function renderLoadingError(_error) {
|
|
|
58
53
|
color: "danger"
|
|
59
54
|
}, formatMessage('Loading failed.')));
|
|
60
55
|
}
|
|
61
|
-
|
|
62
56
|
export default function DocumentsPanel(props) {
|
|
63
57
|
const {
|
|
64
58
|
fetchInitialDocs,
|
|
@@ -86,11 +80,9 @@ export default function DocumentsPanel(props) {
|
|
|
86
80
|
sortBy,
|
|
87
81
|
searchString
|
|
88
82
|
});
|
|
89
|
-
|
|
90
83
|
const handleDocClick = file => {
|
|
91
84
|
props.onLinkClick(file);
|
|
92
85
|
};
|
|
93
|
-
|
|
94
86
|
return /*#__PURE__*/React.createElement(View, {
|
|
95
87
|
as: "div",
|
|
96
88
|
"data-testid": "instructure_links-DocumentsPanel"
|
|
@@ -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, instanceOf, shape } from 'prop-types';
|
|
20
21
|
import { fileOrMediaObjectShape } from '../../shared/fileShape';
|
|
@@ -32,8 +33,6 @@ import { isPreviewable } from '../../shared/Previewable';
|
|
|
32
33
|
import { applyTimezoneOffsetToDate } from '../../shared/dateUtils';
|
|
33
34
|
import RCEGlobals from '../../../RCEGlobals';
|
|
34
35
|
export default function Link(props) {
|
|
35
|
-
var _RCEGlobals$getConfig;
|
|
36
|
-
|
|
37
36
|
const [isHovering, setIsHovering] = useState(false);
|
|
38
37
|
const {
|
|
39
38
|
filename,
|
|
@@ -46,12 +45,11 @@ export default function Link(props) {
|
|
|
46
45
|
disabledMessage
|
|
47
46
|
} = props;
|
|
48
47
|
const Icon = getIconFromType(content_type);
|
|
49
|
-
const color = published ? 'success' : 'primary';
|
|
50
|
-
|
|
51
|
-
const configuredTimezone =
|
|
48
|
+
const color = published ? 'success' : 'primary';
|
|
49
|
+
// Uses user locale and timezone
|
|
50
|
+
const configuredTimezone = RCEGlobals.getConfig()?.timezone;
|
|
52
51
|
const dateString = formatMessage.date(applyTimezoneOffsetToDate(date, configuredTimezone), 'long');
|
|
53
52
|
const publishedMsg = published ? formatMessage('published') : formatMessage('unpublished');
|
|
54
|
-
|
|
55
53
|
function linkAttrsFromDoc() {
|
|
56
54
|
const canPreview = isPreviewable(props.content_type);
|
|
57
55
|
const clazz = classnames('instructure_file_link', {
|
|
@@ -73,44 +71,35 @@ export default function Link(props) {
|
|
|
73
71
|
embedded_iframe_url: props.embedded_iframe_url,
|
|
74
72
|
media_entry_id: props.media_entry_id
|
|
75
73
|
};
|
|
76
|
-
|
|
77
74
|
if (canPreview) {
|
|
78
75
|
attrs['data-canvas-previewable'] = true;
|
|
79
76
|
}
|
|
80
|
-
|
|
81
77
|
return attrs;
|
|
82
78
|
}
|
|
83
|
-
|
|
84
79
|
function handleLinkClick(e) {
|
|
85
80
|
e.preventDefault();
|
|
86
81
|
props.onClick(linkAttrsFromDoc());
|
|
87
82
|
}
|
|
88
|
-
|
|
89
83
|
function handleLinkKey(e) {
|
|
90
84
|
// press the button on enter or space
|
|
91
85
|
if (e.keyCode === 13 || e.keyCode === 32) {
|
|
92
86
|
handleLinkClick(e);
|
|
93
87
|
}
|
|
94
88
|
}
|
|
95
|
-
|
|
96
89
|
function handleDragStart(e) {
|
|
97
90
|
const linkAttrs = linkAttrsFromDoc();
|
|
98
91
|
dragHtml(e, renderLinkHtml(linkAttrs, linkAttrs.text));
|
|
99
92
|
}
|
|
100
|
-
|
|
101
93
|
function handleDragEnd(_e) {
|
|
102
94
|
document.body.click();
|
|
103
95
|
}
|
|
104
|
-
|
|
105
96
|
function handleHover(e) {
|
|
106
97
|
setIsHovering(e.type === 'mouseenter');
|
|
107
98
|
}
|
|
108
|
-
|
|
109
99
|
function buildCallback(callback) {
|
|
110
100
|
if (disabled) return;
|
|
111
101
|
return callback;
|
|
112
102
|
}
|
|
113
|
-
|
|
114
103
|
function dateOrMessage(str) {
|
|
115
104
|
if (disabled && disabledMessage) {
|
|
116
105
|
return /*#__PURE__*/React.createElement(View, {
|
|
@@ -121,27 +110,22 @@ export default function Link(props) {
|
|
|
121
110
|
fontStyle: "italic"
|
|
122
111
|
}, disabledMessage)));
|
|
123
112
|
}
|
|
124
|
-
|
|
125
113
|
if (str) {
|
|
126
114
|
return /*#__PURE__*/React.createElement(View, {
|
|
127
115
|
as: "div"
|
|
128
116
|
}, str);
|
|
129
117
|
}
|
|
130
118
|
}
|
|
131
|
-
|
|
132
119
|
function textStyles() {
|
|
133
120
|
if (disabled) return {
|
|
134
121
|
color: 'gray'
|
|
135
122
|
};
|
|
136
123
|
return {};
|
|
137
124
|
}
|
|
138
|
-
|
|
139
125
|
let elementRef = null;
|
|
140
|
-
|
|
141
126
|
if (props.focusRef) {
|
|
142
127
|
elementRef = ref => props.focusRef.current = ref;
|
|
143
128
|
}
|
|
144
|
-
|
|
145
129
|
return /*#__PURE__*/React.createElement("div", {
|
|
146
130
|
"data-testid": "instructure_links-Link",
|
|
147
131
|
draggable: true,
|
|
@@ -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 formatMessage from '../../../format-message';
|
|
19
20
|
import clickCallback from './clickCallback';
|
|
20
21
|
import bridge from '../../../bridge';
|
|
@@ -23,14 +24,12 @@ import tinymce from 'tinymce';
|
|
|
23
24
|
const COURSE_PLUGIN_KEY = 'course_documents';
|
|
24
25
|
const USER_PLUGIN_KEY = 'user_documents';
|
|
25
26
|
const GROUP_PLUGIN_KEY = 'group_documents';
|
|
26
|
-
|
|
27
27
|
function getMenuItems(ed) {
|
|
28
28
|
const contextType = ed.settings.canvas_rce_user_context.type;
|
|
29
29
|
const items = [{
|
|
30
30
|
text: formatMessage('Upload Document'),
|
|
31
31
|
value: 'instructure_upload_document'
|
|
32
32
|
}];
|
|
33
|
-
|
|
34
33
|
if (contextType === 'course') {
|
|
35
34
|
items.push({
|
|
36
35
|
text: formatMessage('Course Documents'),
|
|
@@ -42,45 +41,41 @@ function getMenuItems(ed) {
|
|
|
42
41
|
value: 'instructure_group_document'
|
|
43
42
|
});
|
|
44
43
|
}
|
|
45
|
-
|
|
46
44
|
items.push({
|
|
47
45
|
text: formatMessage('User Documents'),
|
|
48
46
|
value: 'instructure_user_document'
|
|
49
47
|
});
|
|
50
48
|
return items;
|
|
51
49
|
}
|
|
52
|
-
|
|
53
50
|
function doMenuItem(ed, value) {
|
|
54
51
|
switch (value) {
|
|
55
52
|
case 'instructure_upload_document':
|
|
56
53
|
ed.execCommand('mceInstructureDocuments');
|
|
57
54
|
break;
|
|
58
|
-
|
|
59
55
|
case 'instructure_course_document':
|
|
60
56
|
ed.focus(true);
|
|
61
57
|
ed.execCommand('instructureTrayForDocuments', false, COURSE_PLUGIN_KEY);
|
|
62
58
|
break;
|
|
63
|
-
|
|
64
59
|
case 'instructure_user_document':
|
|
65
60
|
ed.focus(true);
|
|
66
61
|
ed.execCommand('instructureTrayForDocuments', false, USER_PLUGIN_KEY);
|
|
67
62
|
break;
|
|
68
|
-
|
|
69
63
|
case 'instructure_group_document':
|
|
70
64
|
ed.focus(true);
|
|
71
65
|
ed.execCommand('instructureTrayForDocuments', false, GROUP_PLUGIN_KEY);
|
|
72
66
|
break;
|
|
73
67
|
}
|
|
74
|
-
}
|
|
75
|
-
|
|
68
|
+
}
|
|
76
69
|
|
|
70
|
+
// Register plugin
|
|
77
71
|
tinymce.PluginManager.add('instructure_documents', function (ed) {
|
|
78
72
|
// Register commands
|
|
79
73
|
ed.addCommand('mceInstructureDocuments', () => clickCallback(ed, document));
|
|
80
74
|
ed.addCommand('instructureTrayForDocuments', (ui, plugin_key) => {
|
|
81
75
|
bridge.showTrayForPlugin(plugin_key, ed.id);
|
|
82
|
-
});
|
|
76
|
+
});
|
|
83
77
|
|
|
78
|
+
// Register menu items
|
|
84
79
|
ed.ui.registry.addNestedMenuItem('instructure_document', {
|
|
85
80
|
text: formatMessage('Document'),
|
|
86
81
|
icon: 'document',
|
|
@@ -95,8 +90,9 @@ tinymce.PluginManager.add('instructure_documents', function (ed) {
|
|
|
95
90
|
}
|
|
96
91
|
};
|
|
97
92
|
})
|
|
98
|
-
});
|
|
93
|
+
});
|
|
99
94
|
|
|
95
|
+
// Register toolbar button
|
|
100
96
|
ed.ui.registry.addMenuButton('instructure_documents', {
|
|
101
97
|
tooltip: formatMessage('Documents'),
|
|
102
98
|
icon: 'document',
|
|
@@ -106,18 +102,15 @@ tinymce.PluginManager.add('instructure_documents', function (ed) {
|
|
|
106
102
|
value: item.value,
|
|
107
103
|
onAction: () => doMenuItem(ed, item.value)
|
|
108
104
|
}))),
|
|
109
|
-
|
|
110
105
|
onSetup(api) {
|
|
111
106
|
function handleNodeChange() {
|
|
112
107
|
api.setDisabled(!isOKToLink(ed.selection.getContent()));
|
|
113
108
|
}
|
|
114
|
-
|
|
115
109
|
setTimeout(handleNodeChange);
|
|
116
110
|
ed.on('NodeChange', handleNodeChange);
|
|
117
111
|
return () => {
|
|
118
112
|
ed.off('NodeChange', handleNodeChange);
|
|
119
113
|
};
|
|
120
114
|
}
|
|
121
|
-
|
|
122
115
|
});
|
|
123
116
|
});
|
|
@@ -15,10 +15,12 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
-
|
|
18
|
+
|
|
19
|
+
import { memoize } from 'lodash';
|
|
20
|
+
|
|
21
|
+
// These commands all work fine with MathJax but either don't work, don't work well
|
|
19
22
|
// (bad UX for editing), or look strange when rendered by Mathlive. Add new ones
|
|
20
23
|
// here if you discover anything else or customers report unexpected experiences.
|
|
21
|
-
|
|
22
24
|
const advancedOnlyCommands = ['begin', 'end', 'cases', 'cr', 'rm', 'text', 'hbox', 'mbox', 'unicode', 'cal', 'frak', 'it', 'scr', 'sf', '#', 'def', 'newcommand', 'operatorname', 'DeclareMathOperator', 'displaystyle', 'textstyle', 'scriptstyle', 'scriptscriptstyle', 'displaylines', 'abovewithdelims', 'array', 'bmatrix', 'buildrel', 'ddddot', 'dddot', 'eqalign', 'eqalignno', 'gcd', 'genfrac', 'hdashline', 'hfil', 'hfill', 'hfilll', 'hline', 'idotsint', 'iiiint', 'injlim', 'kern', 'label', 'LaTeX', 'leftroot', 'lgroup', 'lower', 'mathchoice', 'mathfrak', 'matrix', 'mit', 'mkern', 'mspace', 'negmedspace', 'negthickspace', 'negthinspace', 'newline', 'nobreakspace', 'oldstyle', 'overset', 'pmatrix', 'raise', 'rgroup', 'rule', 'Rule', 'skew', 'space', 'tag', 'TeX', 'underbrace', 'uproot', 'varinjlim', 'varliminf', 'varlimsup', 'varprojlim', 'vcenter', 'vmatrix'];
|
|
23
25
|
const advancedOnlyRegex = new RegExp(advancedOnlyCommands.join('|'), 'm');
|
|
24
26
|
const containsAdvancedSyntax = memoize(latex => advancedOnlyRegex.test(latex));
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
-
export const STORAGE_KEY = 'NEE_should_reopen_advanced';
|
|
19
18
|
|
|
19
|
+
export const STORAGE_KEY = 'NEE_should_reopen_advanced';
|
|
20
20
|
function wrapInErrorHandling(func) {
|
|
21
21
|
try {
|
|
22
22
|
return {
|
|
@@ -31,7 +31,6 @@ function wrapInErrorHandling(func) {
|
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
-
|
|
35
34
|
export const isSet = () => {
|
|
36
35
|
const result = wrapInErrorHandling(() => {
|
|
37
36
|
const value = window.sessionStorage.getItem(STORAGE_KEY) || 'null';
|