@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
|
@@ -31,10 +31,12 @@ export const fileShape = {
|
|
|
31
31
|
locked_for_user: bool,
|
|
32
32
|
published: bool
|
|
33
33
|
};
|
|
34
|
-
export const imageShape = {
|
|
34
|
+
export const imageShape = {
|
|
35
|
+
...fileShape,
|
|
35
36
|
thumbnail_url: string
|
|
36
37
|
};
|
|
37
|
-
export const mediaObjectShape = {
|
|
38
|
+
export const mediaObjectShape = {
|
|
39
|
+
...imageShape,
|
|
38
40
|
title: string.isRequired,
|
|
39
41
|
embedded_iframe_url: string,
|
|
40
42
|
media_entry_id: string
|
|
@@ -76,32 +78,26 @@ export const mediaQueryReturnShape = {
|
|
|
76
78
|
isLoading: bool,
|
|
77
79
|
error: string
|
|
78
80
|
};
|
|
79
|
-
|
|
80
81
|
function createContentTrayDocumentShape(isRequired) {
|
|
81
82
|
return function validateContentTrayDocuments(props, propName, componentName) {
|
|
82
83
|
const p = props[propName];
|
|
83
|
-
|
|
84
84
|
if (!p) {
|
|
85
85
|
if (isRequired) {
|
|
86
86
|
if (!p) {
|
|
87
87
|
return new Error(`Required prop \`${propName}\` not supplied to \`${componentName}\`. Validation failed.`);
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
|
-
|
|
91
90
|
return undefined;
|
|
92
91
|
} else {
|
|
93
92
|
const files = p.user || p.course || p.group || p.User || p.Course || p.Group;
|
|
94
|
-
|
|
95
93
|
if (!files) {
|
|
96
94
|
return new Error(`Invalid prop \`${propName}\` supplied to \`${componentName}\`. Missing "user"|"course"|"group" key.`);
|
|
97
95
|
}
|
|
98
|
-
|
|
99
96
|
if ('searchString' in p) {
|
|
100
97
|
if (!(typeof p.searchString === 'string')) {
|
|
101
98
|
return new Error(`Invalid prop \`${propName}\` supplied to \`${componentName}\`. "searchString" must be a string.`);
|
|
102
99
|
}
|
|
103
100
|
}
|
|
104
|
-
|
|
105
101
|
if (propName === 'documents') {
|
|
106
102
|
checkPropTypes({
|
|
107
103
|
docs: shape(documentQueryReturnShape)
|
|
@@ -124,6 +120,5 @@ function createContentTrayDocumentShape(isRequired) {
|
|
|
124
120
|
}
|
|
125
121
|
};
|
|
126
122
|
}
|
|
127
|
-
|
|
128
123
|
export const contentTrayDocumentShape = createContentTrayDocumentShape(false);
|
|
129
124
|
contentTrayDocumentShape.isRequired = createContentTrayDocumentShape(true);
|
|
@@ -15,7 +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
19
|
import { absoluteToRelativeUrl } from '../../../common/fileUrl';
|
|
20
20
|
import { IconAudioLine, IconDocumentLine, IconMsExcelLine, IconMsPptLine, IconMsWordLine, IconPdfLine, IconVideoLine } from '@instructure/ui-icons';
|
|
21
21
|
import RCEGlobals from '../../RCEGlobals';
|
|
@@ -25,26 +25,21 @@ export function getIconFromType(type) {
|
|
|
25
25
|
} else if (isAudio(type)) {
|
|
26
26
|
return IconAudioLine;
|
|
27
27
|
}
|
|
28
|
-
|
|
29
28
|
switch (type) {
|
|
30
29
|
case 'application/msword':
|
|
31
30
|
case 'application/vnd.apple.pages':
|
|
32
31
|
case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':
|
|
33
32
|
return IconMsWordLine;
|
|
34
|
-
|
|
35
33
|
case 'application/vnd.ms-powerpoint':
|
|
36
34
|
case 'application/vnd.apple.keynote':
|
|
37
35
|
case 'application/vnd.openxmlformats-officedocument.presentationml.presentation':
|
|
38
36
|
return IconMsPptLine;
|
|
39
|
-
|
|
40
37
|
case 'application/pdf':
|
|
41
38
|
return IconPdfLine;
|
|
42
|
-
|
|
43
39
|
case 'application/vnd.ms-excel':
|
|
44
40
|
case 'application/vnd.apple.numbers':
|
|
45
41
|
case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
|
|
46
42
|
return IconMsExcelLine;
|
|
47
|
-
|
|
48
43
|
default:
|
|
49
44
|
return IconDocumentLine;
|
|
50
45
|
}
|
|
@@ -70,72 +65,64 @@ export function isIWork(filename) {
|
|
|
70
65
|
export function getIWorkType(filename) {
|
|
71
66
|
const tokens = filename.split('.');
|
|
72
67
|
if (tokens.length <= 1) return '';
|
|
73
|
-
const lastToken = tokens[tokens.length - 1];
|
|
74
|
-
|
|
75
|
-
switch (lastToken.toLowerCase()) {
|
|
68
|
+
const lastToken = tokens[tokens.length - 1].toLowerCase();
|
|
69
|
+
switch (lastToken) {
|
|
76
70
|
case 'pages':
|
|
77
71
|
return 'application/vnd.apple.pages';
|
|
78
|
-
|
|
79
72
|
case 'key':
|
|
80
73
|
return 'application/vnd.apple.keynote';
|
|
81
|
-
|
|
82
74
|
case 'numbers':
|
|
83
75
|
return 'application/vnd.apple.numbers';
|
|
84
|
-
|
|
85
76
|
default:
|
|
86
77
|
return '';
|
|
87
78
|
}
|
|
88
79
|
}
|
|
89
80
|
export function mediaPlayerURLFromFile(file, canvasOrigin) {
|
|
90
|
-
var _RCEGlobals$getFeatur;
|
|
91
|
-
|
|
92
81
|
// why oh why aren't we consistent?
|
|
93
82
|
const content_type = file['content-type'] || file.content_type || file.type;
|
|
83
|
+
if (typeof content_type !== 'string') throw new Error('Invalid content type');
|
|
94
84
|
const type = content_type.replace(/\/.*$/, '');
|
|
95
|
-
|
|
96
|
-
if (
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
if (file.uuid && (file.contextType == 'User' || !!canvasOrigin && canvasOrigin !== window.location.origin && (_RCEGlobals$getFeatur2 = RCEGlobals.getFeatures()) !== null && _RCEGlobals$getFeatur2 !== void 0 && _RCEGlobals$getFeatur2.file_verifiers_for_quiz_links)) {
|
|
104
|
-
url.query.verifier = file.uuid;
|
|
85
|
+
const baseOrigin = canvasOrigin !== null && canvasOrigin !== void 0 ? canvasOrigin : window.location.origin;
|
|
86
|
+
if (RCEGlobals.getFeatures()?.media_links_use_attachment_id && isAudioOrVideo(content_type) && file.id) {
|
|
87
|
+
const url = new URL(`/media_attachments_iframe/${file.id}`, baseOrigin);
|
|
88
|
+
url.searchParams.set('type', type);
|
|
89
|
+
url.searchParams.set('embedded', 'true');
|
|
90
|
+
if (file.uuid && (file.contextType === 'User' || canvasOrigin && canvasOrigin !== window.location.origin && RCEGlobals.getFeatures()?.file_verifiers_for_quiz_links)) {
|
|
91
|
+
url.searchParams.set('verifier', file.uuid);
|
|
105
92
|
} else if (file.url || file.href) {
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
93
|
+
const href = file.url || file.href;
|
|
94
|
+
if (typeof href !== 'string') {
|
|
95
|
+
throw new Error('Invalid URL');
|
|
96
|
+
}
|
|
97
|
+
const parsedUrl = new URL(href, baseOrigin);
|
|
98
|
+
const verifier = parsedUrl.searchParams.get('verifier');
|
|
99
|
+
if (verifier) {
|
|
100
|
+
url.searchParams.set('verifier', verifier);
|
|
110
101
|
}
|
|
111
102
|
}
|
|
112
|
-
|
|
113
|
-
return format(url);
|
|
103
|
+
return url.toString().replace(baseOrigin, '');
|
|
114
104
|
}
|
|
115
|
-
|
|
116
105
|
if (file.embedded_iframe_url) {
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
return `${absoluteToRelativeUrl(file.embedded_iframe_url, canvasOrigin)}`;
|
|
106
|
+
const embedUrl = new URL(file.embedded_iframe_url, baseOrigin);
|
|
107
|
+
if (embedUrl.searchParams.has('type')) {
|
|
108
|
+
return absoluteToRelativeUrl(file.embedded_iframe_url, canvasOrigin);
|
|
121
109
|
}
|
|
122
|
-
|
|
123
|
-
return `${
|
|
110
|
+
const relative = absoluteToRelativeUrl(file.embedded_iframe_url, canvasOrigin);
|
|
111
|
+
return `${relative}?type=${type}`;
|
|
124
112
|
}
|
|
125
|
-
|
|
126
113
|
if (isAudioOrVideo(content_type)) {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
const mediaEntryId = file.media_entry_id || ((_file$embed = file.embed) === null || _file$embed === void 0 ? void 0 : _file$embed.id) || file.mediaEntryId;
|
|
130
|
-
|
|
114
|
+
const mediaEntryId = file.media_entry_id || file.embed?.id || file.mediaEntryId;
|
|
131
115
|
if (mediaEntryId && mediaEntryId !== 'maybe') {
|
|
132
116
|
return `/media_objects_iframe/${mediaEntryId}?type=${type}`;
|
|
133
117
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
118
|
+
const href = file.url || file.href;
|
|
119
|
+
if (typeof href !== 'string') {
|
|
120
|
+
throw new Error('Invalid URL');
|
|
121
|
+
}
|
|
122
|
+
const parsedUrl = new URL(href, baseOrigin);
|
|
123
|
+
const verifier = parsedUrl.searchParams.get('verifier');
|
|
124
|
+
const verifierParam = verifier ? `&verifier=${verifier}` : '';
|
|
125
|
+
return `/media_objects_iframe?mediahref=${parsedUrl.pathname}${verifierParam}&type=${type}`;
|
|
138
126
|
}
|
|
139
|
-
|
|
140
127
|
return undefined;
|
|
141
128
|
}
|
|
@@ -15,11 +15,10 @@
|
|
|
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 convertFileToBase64 = blob => new Promise((resolve, reject) => {
|
|
19
20
|
const reader = new FileReader();
|
|
20
21
|
reader.readAsDataURL(blob);
|
|
21
|
-
|
|
22
22
|
reader.onload = () => resolve(reader.result);
|
|
23
|
-
|
|
24
23
|
reader.onerror = error => reject(error);
|
|
25
24
|
});
|
|
@@ -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 { SVGIcon } from '@instructure/ui-svg-images';
|
|
20
21
|
import { IconAssignmentLine, IconDiscussionLine, IconModuleLine, IconQuizLine, IconQuizSolid as IconNewQuiz, IconAnnouncementLine, IconDocumentLine } from '@instructure/ui-icons';
|
|
@@ -31,28 +32,20 @@ export const getIcon = type => {
|
|
|
31
32
|
switch (type) {
|
|
32
33
|
case 'assignments':
|
|
33
34
|
return IconAssignmentLine;
|
|
34
|
-
|
|
35
35
|
case 'discussions':
|
|
36
36
|
return IconDiscussionLine;
|
|
37
|
-
|
|
38
37
|
case 'modules':
|
|
39
38
|
return IconModuleLine;
|
|
40
|
-
|
|
41
39
|
case 'quizzes':
|
|
42
40
|
return IconQuizLine;
|
|
43
|
-
|
|
44
41
|
case 'quizzes.next':
|
|
45
42
|
return IconNewQuiz;
|
|
46
|
-
|
|
47
43
|
case 'announcements':
|
|
48
44
|
return IconAnnouncementLine;
|
|
49
|
-
|
|
50
45
|
case 'wikiPages':
|
|
51
46
|
return IconDocumentLine;
|
|
52
|
-
|
|
53
47
|
case 'navigation':
|
|
54
48
|
return IconBlank;
|
|
55
|
-
|
|
56
49
|
default:
|
|
57
50
|
return IconDocumentLine;
|
|
58
51
|
}
|
|
@@ -61,28 +54,20 @@ export const getFriendlyLinkType = type => {
|
|
|
61
54
|
switch (type) {
|
|
62
55
|
case 'assignments':
|
|
63
56
|
return formatMessage('Assignment');
|
|
64
|
-
|
|
65
57
|
case 'discussions':
|
|
66
58
|
return formatMessage('Discussion');
|
|
67
|
-
|
|
68
59
|
case 'modules':
|
|
69
60
|
return formatMessage('Module');
|
|
70
|
-
|
|
71
61
|
case 'quizzes':
|
|
72
62
|
return formatMessage('Quiz');
|
|
73
|
-
|
|
74
63
|
case 'quizzes.next':
|
|
75
64
|
return formatMessage('New Quiz');
|
|
76
|
-
|
|
77
65
|
case 'announcements':
|
|
78
66
|
return formatMessage('Announcement');
|
|
79
|
-
|
|
80
67
|
case 'wikiPages':
|
|
81
68
|
return formatMessage('Page');
|
|
82
|
-
|
|
83
69
|
case 'navigation':
|
|
84
70
|
return formatMessage('Navigation');
|
|
85
|
-
|
|
86
71
|
default:
|
|
87
72
|
return '';
|
|
88
73
|
}
|
|
@@ -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
|
-
|
|
19
|
-
|
|
18
|
+
|
|
19
|
+
export default function round(number, decimalDigits = 2) {
|
|
20
20
|
if (decimalDigits < 0) throw new Error('decimal digits must be >= 0');
|
|
21
21
|
if (decimalDigits % 1 !== 0) throw new Error('decimal digits must be a whole number');
|
|
22
22
|
const val = Math.round(number * 10 ** decimalDigits) / 10 ** decimalDigits;
|
|
@@ -15,17 +15,21 @@
|
|
|
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
|
const MASQUERADE_SELECTOR = 'body.is-masquerading-or-student-view';
|
|
19
|
-
let trayHeight = null;
|
|
20
|
+
let trayHeight = null;
|
|
21
|
+
export const resetTrayHeight = () => {
|
|
22
|
+
trayHeight = null;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
// Adjusts the height that slide-out trays should take up based on the presence
|
|
20
26
|
// or absence of the masquerade bottom bar. Caches the result of this check
|
|
21
27
|
// forever, since we always reload the bundle when you enter/leave masquerade.
|
|
22
|
-
|
|
23
28
|
export const getTrayHeight = () => {
|
|
24
29
|
if (!trayHeight) {
|
|
25
30
|
const masqueradeBar = document.querySelector(MASQUERADE_SELECTOR);
|
|
26
31
|
trayHeight = masqueradeBar ? 'calc(100vh - 50px)' : '100vh';
|
|
27
32
|
}
|
|
28
|
-
|
|
29
33
|
return trayHeight;
|
|
30
34
|
};
|
|
31
35
|
export const isExternalUrl = url => {
|
|
@@ -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 { useState, useEffect } from 'react';
|
|
20
|
+
|
|
21
|
+
// Given a URL to some resource (lik an image),
|
|
19
22
|
// fetches that resource and creates a base64
|
|
20
23
|
// data URL representation of the resource
|
|
21
|
-
|
|
22
24
|
const useDataUrl = () => {
|
|
23
25
|
const [url, setUrl] = useState('');
|
|
24
26
|
const [dataUrl, setDataUrl] = useState('');
|
|
@@ -28,21 +30,21 @@ const useDataUrl = () => {
|
|
|
28
30
|
useEffect(() => {
|
|
29
31
|
async function fetchDataUrl() {
|
|
30
32
|
try {
|
|
31
|
-
setLoading(true);
|
|
33
|
+
setLoading(true);
|
|
32
34
|
|
|
35
|
+
// Fetch the data and parse as blob
|
|
33
36
|
const response = await fetch(url);
|
|
34
|
-
const blob = await response.blob();
|
|
37
|
+
const blob = await response.blob();
|
|
38
|
+
|
|
39
|
+
// Return a promise that resolves with
|
|
35
40
|
// the the result of the blob read as
|
|
36
41
|
// a data URL.
|
|
37
|
-
|
|
38
42
|
return new Promise((resolve, reject) => {
|
|
39
43
|
const reader = new FileReader();
|
|
40
|
-
|
|
41
44
|
reader.onloadend = () => resolve({
|
|
42
45
|
result: reader.result,
|
|
43
46
|
blob
|
|
44
47
|
});
|
|
45
|
-
|
|
46
48
|
reader.onerror = reject;
|
|
47
49
|
reader.readAsDataURL(blob);
|
|
48
50
|
});
|
|
@@ -50,13 +52,11 @@ const useDataUrl = () => {
|
|
|
50
52
|
setError(e);
|
|
51
53
|
}
|
|
52
54
|
}
|
|
53
|
-
|
|
54
55
|
if (url) {
|
|
55
|
-
fetchDataUrl().then(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
} = _ref;
|
|
56
|
+
fetchDataUrl().then(({
|
|
57
|
+
result,
|
|
58
|
+
blob
|
|
59
|
+
}) => {
|
|
60
60
|
setDataUrl(result);
|
|
61
61
|
setDataBlob(blob);
|
|
62
62
|
}).catch(e => {
|
|
@@ -72,5 +72,4 @@ const useDataUrl = () => {
|
|
|
72
72
|
dataBlob
|
|
73
73
|
};
|
|
74
74
|
};
|
|
75
|
-
|
|
76
75
|
export default useDataUrl;
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import { useState } from 'react';
|
|
19
20
|
const DEFAULT_FILTER_SETTINGS = {
|
|
20
21
|
contentSubtype: 'all',
|
|
@@ -24,12 +25,11 @@ const DEFAULT_FILTER_SETTINGS = {
|
|
|
24
25
|
};
|
|
25
26
|
export function useFilterSettings(default_settings) {
|
|
26
27
|
const [filterSettings, setFilterSettings] = useState(default_settings || DEFAULT_FILTER_SETTINGS);
|
|
27
|
-
|
|
28
28
|
function updateFilterSettings(nextSettings) {
|
|
29
|
-
setFilterSettings({
|
|
29
|
+
setFilterSettings({
|
|
30
|
+
...filterSettings,
|
|
30
31
|
...nextSettings
|
|
31
32
|
});
|
|
32
33
|
}
|
|
33
|
-
|
|
34
34
|
return [filterSettings, updateFilterSettings];
|
|
35
35
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import _pt from "prop-types";
|
|
2
|
-
|
|
3
2
|
/*
|
|
4
3
|
* Copyright (C) 2018 - present Instructure, Inc.
|
|
5
4
|
*
|
|
@@ -17,20 +16,20 @@ 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
|
*/
|
|
20
|
-
import React from 'react'; // @ts-expect-error
|
|
21
19
|
|
|
20
|
+
import React from 'react';
|
|
21
|
+
// @ts-expect-error
|
|
22
22
|
import contrast from 'wcag-element-contrast';
|
|
23
23
|
import { TextInput } from '@instructure/ui-text-input';
|
|
24
24
|
import { View } from '@instructure/ui-view';
|
|
25
25
|
import ColorPicker from './color-picker';
|
|
26
26
|
import { stringifyRGBA, restrictColorValues, parseRGBA } from '../utils/colors';
|
|
27
27
|
export default class ColorField extends React.Component {
|
|
28
|
-
constructor() {
|
|
29
|
-
super(...
|
|
28
|
+
constructor(...args) {
|
|
29
|
+
super(...args);
|
|
30
30
|
this.state = {
|
|
31
31
|
textValue: this.props.value
|
|
32
32
|
};
|
|
33
|
-
|
|
34
33
|
this.handleTextChange = event => {
|
|
35
34
|
const rgba = parseRGBA(event.target.value.trim());
|
|
36
35
|
const newValue = rgba ? stringifyRGBA(restrictColorValues(rgba)) : this.props.value;
|
|
@@ -44,7 +43,6 @@ export default class ColorField extends React.Component {
|
|
|
44
43
|
}
|
|
45
44
|
});
|
|
46
45
|
};
|
|
47
|
-
|
|
48
46
|
this.handlePickerChange = color => {
|
|
49
47
|
const newValue = stringifyRGBA(color.rgb);
|
|
50
48
|
this.setState({
|
|
@@ -58,7 +56,6 @@ export default class ColorField extends React.Component {
|
|
|
58
56
|
});
|
|
59
57
|
};
|
|
60
58
|
}
|
|
61
|
-
|
|
62
59
|
render() {
|
|
63
60
|
return /*#__PURE__*/React.createElement(View, {
|
|
64
61
|
as: "div"
|
|
@@ -76,7 +73,6 @@ export default class ColorField extends React.Component {
|
|
|
76
73
|
onChange: this.handlePickerChange
|
|
77
74
|
}));
|
|
78
75
|
}
|
|
79
|
-
|
|
80
76
|
}
|
|
81
77
|
ColorField.propTypes = {
|
|
82
78
|
label: _pt.string.isRequired,
|