@instructure/canvas-rce 5.14.1 → 5.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/DEVELOPMENT.md +1 -1
- package/README.md +0 -8
- package/__tests__/common/indicate.test.js +84 -0
- package/__tests__/common/mimeClass.test.js +85 -0
- package/__tests__/module/contentInsertionUtils.test.js +52 -0
- package/__tests__/module/indicatorRegion.test.js +75 -0
- package/__tests__/module/normalizeLocale.test.js +46 -0
- package/__tests__/module/normalizeProps.test.js +51 -0
- package/__tests__/module/sanitizePlugins.test.js +48 -0
- package/__tests__/module/wrapInitCb.test.js +56 -0
- package/__tests__/rcs/api.test.js +819 -0
- package/{mocha-reporter-config.js → __tests__/sidebar/actions/all_files.test.js} +10 -9
- package/__tests__/sidebar/actions/data.test.js +196 -0
- package/__tests__/sidebar/actions/utils.js +44 -0
- package/{es/rce/plugins/shared/__mocks__/screenfull.js → __tests__/sidebar/reducers/all_files.test.js} +10 -6
- package/babel.config.js +3 -1
- package/es/bridge/Bridge.js +8 -56
- package/es/bridge/index.js +1 -0
- package/es/canvasFileBrowser/FileBrowser.js +12 -59
- package/es/canvasFileBrowser/en-US.js +3 -6
- package/es/common/FlashAlert.js +7 -28
- package/es/common/browser.js +4 -2
- package/es/common/fileUrl.js +104 -59
- package/es/common/incremental-loading/LoadMoreButton.js +1 -0
- package/es/common/incremental-loading/LoadingIndicator.js +1 -2
- package/es/common/incremental-loading/LoadingStatus.js +1 -2
- package/es/common/incremental-loading/index.js +1 -0
- package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
- package/es/common/indicate.js +15 -8
- package/es/common/mimeClass.js +3 -4
- package/es/common/natcompare.js +1 -4
- package/es/defaultTinymceConfig.js +5 -3
- package/es/elementDenylist.js +1 -0
- package/es/enhance-user-content/doc_previews.js +17 -28
- package/es/enhance-user-content/enhance_user_content.js +28 -60
- package/es/enhance-user-content/external_links.js +5 -8
- package/es/enhance-user-content/index.js +1 -0
- package/es/enhance-user-content/instructure_helper.js +12 -34
- package/es/enhance-user-content/jqueryish_funcs.js +8 -11
- package/es/enhance-user-content/mathml.js +35 -82
- package/es/enhance-user-content/media_comment_thumbnail.js +5 -17
- package/es/format-message.js +3 -4
- package/es/getThemeVars.js +8 -6
- package/es/getTranslations.js +1 -78
- package/es/index.js +3 -1
- package/es/rce/AlertMessageArea.js +1 -1
- package/es/rce/DraggingBlocker.js +4 -2
- package/es/rce/KeyboardShortcutModal.js +1 -0
- package/es/rce/RCE.js +12 -11
- package/es/rce/RCEGlobals.js +12 -10
- package/es/rce/RCEVariants.js +27 -10
- package/es/rce/RCEWrapper.js +167 -386
- package/es/rce/RCEWrapperProps.js +8 -3
- package/es/rce/RceHtmlEditor.js +5 -8
- package/es/rce/ResizeHandle.js +3 -8
- package/es/rce/RestoreAutoSaveModal.js +1 -2
- package/es/rce/ShowOnFocusButton/index.js +0 -6
- package/es/rce/StatusBar.js +8 -37
- package/es/rce/alertHandler.js +1 -4
- package/es/rce/contentInsertion.js +35 -57
- package/es/rce/contentInsertionUtils.js +6 -8
- package/es/rce/contentRendering.js +7 -12
- package/es/rce/customEvents.js +1 -0
- package/es/rce/editorLanguage.js +22 -10
- package/es/rce/indicatorRegion.js +6 -5
- package/es/rce/normalizeLocale.js +5 -3
- package/es/rce/normalizeProps.js +3 -1
- package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
- package/es/rce/plugins/instructure_color/clickCallback.js +84 -0
- package/es/rce/plugins/instructure_color/components/ColorPicker.js +299 -0
- package/es/rce/plugins/instructure_color/components/ColorPopup.js +68 -0
- package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
- package/es/rce/plugins/instructure_color/plugin.js +40 -0
- package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
- package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
- package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
- package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +22 -15
- package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +1 -2
- package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
- package/es/rce/plugins/instructure_documents/components/Link.js +3 -18
- package/es/rce/plugins/instructure_documents/plugin.js +7 -14
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +12 -29
- package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +11 -12
- package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +4 -3
- package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +13 -7
- package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +4 -7
- package/es/rce/plugins/instructure_equation/MathIcon/index.js +1 -1
- package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
- package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_equation/mathlive/index.js +1 -1
- package/es/rce/plugins/instructure_equation/plugin.js +7 -10
- package/es/rce/plugins/instructure_fullscreen/plugin.js +3 -6
- package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
- package/es/rce/plugins/instructure_icon_maker/clickCallback.js +2 -4
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +1 -2
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +1 -2
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +25 -22
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +7 -11
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +27 -23
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +5 -4
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +11 -9
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +5 -4
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +1 -3
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +7 -7
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +27 -20
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +4 -4
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +1 -2
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +1 -5
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +18 -33
- package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
- package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
- package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
- package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
- package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +1 -3
- package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
- package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
- package/es/rce/plugins/instructure_icon_maker/svg/image.js +69 -83
- package/es/rce/plugins/instructure_icon_maker/svg/index.js +11 -15
- package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/svg/settings.js +32 -39
- package/es/rce/plugins/instructure_icon_maker/svg/shape.js +1 -49
- package/es/rce/plugins/instructure_icon_maker/svg/text.js +7 -92
- package/es/rce/plugins/instructure_icon_maker/svg/utils.js +1 -7
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +2 -6
- package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
- package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
- package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +1 -1
- package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
- package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
- package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +6 -24
- package/es/rce/plugins/instructure_image/ImageList/Image.js +1 -6
- package/es/rce/plugins/instructure_image/ImageList/index.js +1 -2
- package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +7 -27
- package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +3 -16
- package/es/rce/plugins/instructure_image/Images/index.js +1 -3
- package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_image/plugin.js +13 -18
- package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
- package/es/rce/plugins/instructure_links/components/AccordionSection.js +1 -0
- package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
- package/es/rce/plugins/instructure_links/components/Link.js +7 -19
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +1 -21
- package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +1 -4
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
- package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +1 -12
- package/es/rce/plugins/instructure_links/components/LinkSet.js +4 -20
- package/es/rce/plugins/instructure_links/components/LinksPanel.js +1 -2
- package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
- package/es/rce/plugins/instructure_links/components/NoResults.js +1 -7
- package/es/rce/plugins/instructure_links/plugin.js +17 -40
- package/es/rce/plugins/instructure_links/validateURL.js +81 -36
- package/es/rce/plugins/instructure_media_embed/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_media_embed/components/Embed.js +1 -0
- package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
- package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
- package/es/rce/plugins/instructure_paste/plugin.js +27 -29
- package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +14 -53
- package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +21 -49
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +11 -42
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +2 -10
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
- package/es/rce/{__mocks__/_mockStudioPlayer.js → plugins/instructure_rce_external_tools/constants.js} +11 -3
- package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +19 -4
- package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
- package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +130 -136
- package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +100 -95
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +2 -19
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +1 -14
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +18 -10
- package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +4 -4
- package/es/rce/plugins/instructure_rce_external_tools/plugin.js +7 -16
- package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
- package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +1 -25
- package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +1 -4
- package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
- package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +8 -51
- package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +4 -17
- package/es/rce/plugins/instructure_record/clickCallback.js +7 -15
- package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
- package/es/rce/plugins/instructure_record/plugin.js +11 -18
- package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +20 -35
- package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +3 -18
- package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
- package/es/rce/plugins/instructure_search_and_replace/plugin.js +1 -3
- package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
- package/es/rce/plugins/instructure_wordcount/clickCallback.js +2 -5
- package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +1 -4
- package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
- package/es/rce/plugins/instructure_wordcount/utils/countContent.js +1 -8
- package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +1 -0
- package/es/rce/plugins/shared/CanvasContentTray.js +22 -49
- package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
- package/es/rce/plugins/shared/ColorInput.js +5 -14
- package/es/rce/plugins/shared/ConditionalTooltip.js +1 -0
- package/es/rce/plugins/shared/ContentSelection.js +17 -58
- package/es/rce/plugins/shared/DimensionUtils.js +1 -8
- package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
- package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
- package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
- package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
- package/es/rce/plugins/shared/EventUtils.js +1 -3
- package/es/rce/plugins/shared/Filter.js +8 -38
- package/es/rce/plugins/shared/FixedContentTray.js +3 -3
- package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +1 -8
- package/es/rce/plugins/shared/ImageCropper/Modal.js +4 -7
- package/es/rce/plugins/shared/ImageCropper/Preview.js +7 -11
- package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +2 -5
- package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +1 -10
- package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +1 -11
- package/es/rce/plugins/shared/ImageCropper/controls/index.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +3 -16
- package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +1 -10
- package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
- package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
- package/es/rce/plugins/shared/ImageCropper/svg/shape.js +1 -17
- package/es/rce/plugins/shared/ImageCropper/svg/utils.js +1 -0
- package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +19 -46
- package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
- package/es/rce/plugins/shared/ImageOptionsForm.js +1 -2
- package/es/rce/plugins/shared/LinkDisplay.js +1 -2
- package/es/rce/plugins/shared/PreviewIcon.js +1 -6
- package/es/rce/plugins/shared/Previewable.js +1 -0
- package/es/rce/plugins/shared/RceFileBrowser.js +5 -7
- package/es/rce/plugins/shared/StoreContext.js +1 -2
- package/es/rce/plugins/shared/StudioLtiSupportUtils.js +10 -6
- package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
- package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +13 -18
- package/es/rce/plugins/shared/Upload/CategoryProcessor.js +1 -1
- package/es/rce/plugins/shared/Upload/ComputerPanel.js +8 -26
- package/es/rce/plugins/shared/Upload/PanelFilter.js +3 -12
- package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
- package/es/rce/plugins/shared/Upload/UploadFile.js +15 -18
- package/es/rce/plugins/shared/Upload/UploadFileModal.js +9 -25
- package/es/rce/plugins/shared/Upload/UrlPanel.js +1 -0
- package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +7 -12
- package/es/rce/plugins/shared/Upload/doFileUpload.js +4 -6
- package/es/rce/plugins/shared/Upload/index.js +1 -0
- package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +1 -3
- package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +6 -24
- package/es/rce/plugins/shared/ai_tools/aiicons.js +1 -0
- package/es/rce/plugins/shared/ai_tools/index.js +1 -0
- package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
- package/es/rce/plugins/shared/canvasContentUtils.js +6 -9
- package/es/rce/plugins/shared/compressionUtils.js +1 -8
- package/es/rce/plugins/shared/dateUtils.js +1 -1
- package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
- package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +7 -10
- package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
- package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
- package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
- package/es/rce/plugins/shared/fileShape.js +4 -9
- package/es/rce/plugins/shared/fileTypeUtils.js +32 -42
- package/es/rce/plugins/shared/fileUtils.js +1 -2
- package/es/rce/plugins/shared/linkUtils.js +1 -16
- package/es/rce/plugins/shared/round.js +1 -0
- package/es/rce/plugins/shared/trayUtils.js +4 -3
- package/es/rce/plugins/shared/useDataUrl.js +9 -9
- package/es/rce/plugins/shared/useFilterSettings.js +3 -3
- package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +2 -6
- package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +5 -63
- package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +1 -6
- package/es/rce/plugins/tinymce-a11y-checker/plugin.js +4 -7
- package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
- package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +1 -5
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
- package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +1 -4
- package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
- package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +1 -6
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
- package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
- package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
- package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
- package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +1 -26
- package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +16 -15
- package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +7 -10
- package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
- package/es/rce/root.js +9 -8
- package/es/rce/sanitizePlugins.js +1 -3
- package/es/rce/style.js +1 -4
- package/es/rce/tinyRCE.js +13 -9
- package/es/rce/tinymce.oxide.content.min.css.js +1 -0
- package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
- package/es/rce/transformContent.js +8 -10
- package/es/rce/types.js +1 -0
- package/es/rce/userOS.js +1 -1
- package/es/rce/wrapInitCb.js +50 -43
- package/es/rcs/api.js +61 -116
- package/es/rcs/buildError.js +5 -17
- package/es/rcs/fake.js +4 -13
- package/es/sidebar/actions/all_files.js +2 -0
- package/es/sidebar/actions/data.js +4 -7
- package/es/sidebar/actions/documents.js +9 -6
- package/es/sidebar/actions/files.js +3 -6
- package/es/sidebar/actions/filter.js +1 -0
- package/es/sidebar/actions/flickr.js +1 -1
- package/es/sidebar/actions/images.js +12 -11
- package/es/sidebar/actions/links.js +1 -0
- package/es/sidebar/actions/media.js +12 -10
- package/es/sidebar/actions/session.js +1 -3
- package/es/sidebar/actions/ui.js +1 -0
- package/es/sidebar/actions/upload.js +14 -39
- package/es/sidebar/containers/Sidebar.js +1 -2
- package/es/sidebar/containers/sidebarHandlers.js +3 -1
- package/es/sidebar/dragHtml.js +5 -3
- package/es/sidebar/reducers/all_files.js +4 -3
- package/es/sidebar/reducers/collection.js +12 -13
- package/es/sidebar/reducers/collections.js +5 -5
- package/es/sidebar/reducers/documents.js +6 -13
- package/es/sidebar/reducers/files.js +3 -3
- package/es/sidebar/reducers/filter.js +1 -8
- package/es/sidebar/reducers/flickr.js +9 -9
- package/es/sidebar/reducers/folder.js +15 -15
- package/es/sidebar/reducers/folders.js +3 -3
- package/es/sidebar/reducers/images.js +3 -13
- package/es/sidebar/reducers/index.js +3 -1
- package/es/sidebar/reducers/media.js +6 -13
- package/es/sidebar/reducers/newPageLinkExpanded.js +1 -2
- package/es/sidebar/reducers/noop.js +1 -0
- package/es/sidebar/reducers/rootFolderId.js +1 -2
- package/es/sidebar/reducers/session.js +3 -3
- package/es/sidebar/reducers/ui.js +3 -16
- package/es/sidebar/reducers/upload.js +8 -40
- package/es/sidebar/store/configureStore.js +1 -0
- package/es/sidebar/store/initialState.js +13 -24
- package/es/translations/locales/ab.js +1 -0
- package/es/translations/locales/ar.js +67 -9
- package/es/translations/locales/ca.js +67 -9
- package/es/translations/locales/cs.js +1 -0
- package/es/translations/locales/cs_CZ.js +1 -0
- package/es/translations/locales/cy.js +67 -9
- package/es/translations/locales/da-x-k12.js +67 -9
- package/es/translations/locales/da.js +67 -9
- package/es/translations/locales/da_DK.js +1 -0
- package/es/translations/locales/de.js +67 -9
- package/es/translations/locales/el.js +4 -0
- package/es/translations/locales/en-AU-x-unimelb.js +67 -9
- package/es/translations/locales/en-GB-x-ukhe.js +67 -9
- package/es/translations/locales/en.js +72 -8
- package/es/translations/locales/en_AU.js +67 -9
- package/es/translations/locales/en_CA.js +67 -9
- package/es/translations/locales/en_CY.js +67 -9
- package/es/translations/locales/en_GB.js +67 -9
- package/es/translations/locales/en_NZ.js +1 -0
- package/es/translations/locales/en_SE.js +1 -0
- package/es/translations/locales/en_US.js +1 -0
- package/es/translations/locales/es.js +67 -9
- package/es/translations/locales/es_ES.js +67 -9
- package/es/translations/locales/es_GT.js +1 -0
- package/es/translations/locales/fa_IR.js +7 -0
- package/es/translations/locales/fi.js +67 -9
- package/es/translations/locales/fr.js +67 -9
- package/es/translations/locales/fr_CA.js +68 -10
- package/es/translations/locales/ga.js +5 -13
- package/es/translations/locales/he.js +7 -0
- package/es/translations/locales/hi.js +67 -9
- package/es/translations/locales/ht.js +67 -9
- package/es/translations/locales/hu.js +7 -6
- package/es/translations/locales/hu_HU.js +1 -0
- package/es/translations/locales/hy.js +1 -0
- package/es/translations/locales/id.js +67 -9
- package/es/translations/locales/id_ID.js +1 -0
- package/es/translations/locales/is.js +67 -9
- package/es/translations/locales/it.js +67 -9
- package/es/translations/locales/ja.js +67 -9
- package/es/translations/locales/ko.js +1 -0
- package/es/translations/locales/ko_KR.js +1 -0
- package/es/translations/locales/lt.js +1 -0
- package/es/translations/locales/lt_LT.js +1 -0
- package/es/translations/locales/mi.js +67 -9
- package/es/translations/locales/mn_MN.js +1 -0
- package/es/translations/locales/ms.js +67 -9
- package/es/translations/locales/nb-x-k12.js +67 -9
- package/es/translations/locales/nb.js +67 -9
- package/es/translations/locales/nl.js +67 -9
- package/es/translations/locales/nl_NL.js +1 -0
- package/es/translations/locales/nn.js +7 -6
- package/es/translations/locales/pl.js +67 -9
- package/es/translations/locales/pt.js +67 -9
- package/es/translations/locales/pt_BR.js +67 -9
- package/es/translations/locales/ro.js +1 -0
- package/es/translations/locales/ru.js +67 -9
- package/es/translations/locales/se.js +1 -0
- package/es/translations/locales/sl.js +67 -9
- package/es/translations/locales/sv-x-k12.js +67 -9
- package/es/translations/locales/sv.js +67 -9
- package/es/translations/locales/sv_SE.js +1 -0
- package/es/translations/locales/tg.js +1 -0
- package/es/translations/locales/th.js +67 -9
- package/es/translations/locales/th_TH.js +1 -0
- package/es/translations/locales/tl_PH.js +1 -0
- package/es/translations/locales/tr.js +7 -0
- package/es/translations/locales/uk_UA.js +7 -0
- package/es/translations/locales/vi.js +67 -9
- package/es/translations/locales/vi_VN.js +1 -0
- package/es/translations/locales/zh-Hans.js +67 -9
- package/es/translations/locales/zh-Hant.js +67 -9
- package/es/translations/locales/zh.js +67 -9
- package/es/translations/locales/zh_HK.js +67 -9
- package/es/translations/locales/zh_TW.Big5.js +1 -0
- package/es/translations/locales/zh_TW.js +1 -0
- package/es/translations/tinymce/ar_SA.js +1 -0
- package/es/translations/tinymce/fi.js +1 -0
- package/es/translations/tinymce/ga.js +1 -0
- package/es/translations/tinymce/id.js +1 -0
- package/es/translations/tinymce/ru.js +1 -0
- package/es/translations/tinymce/ru_RU.js +1 -0
- package/es/translations/tinymce/sl.js +1 -0
- package/es/translations/tinymce/sr.js +1 -0
- package/es/translations/tinymce/th.js +1 -0
- package/es/translations/tinymce/uk_UA.js +1 -0
- package/es/translations/tinymce/vi_VN.js +1 -0
- package/es/util/TypedDict.js +4 -2
- package/es/util/encrypted-storage.js +3 -13
- package/es/util/file-url-util.js +1 -6
- package/es/util/fullscreenHelpers.js +4 -1
- package/es/util/instui-icon-helper.js +4 -3
- package/es/util/loadingPlaceholder.js +38 -39
- package/es/util/simpleCache.js +0 -3
- package/es/util/string-util.js +1 -1
- package/es/util/textarea-editing-util.js +3 -7
- package/es/util/tinymce-plugin-util.js +0 -5
- package/es/util/url-util.js +16 -25
- package/eslint.config.js +239 -0
- package/jest.config.js +1 -1
- package/package.json +76 -81
- package/scripts/build-canvas +2 -1
- package/scripts/build.js +4 -4
- package/testcafe/RCEWrapper.test.js +0 -1
- package/testcafe/StatusBar.test.js +0 -1
- package/testcafe/axe.test.js +3 -4
- package/testcafe/enhanceUserContent.test.js +0 -1
- package/tsconfig.json +20 -15
- package/.eslintrc +0 -45
- package/.prettierignore +0 -6
- package/es/rce/__mocks__/_mockCryptoEs.js +0 -124
- package/es/rce/__mocks__/styleMock.js +0 -18
- package/es/rce/__mocks__/tinymceReact.js +0 -55
- package/es/rce/plugins/tinymce-a11y-checker/rules/__mocks__/index.js +0 -53
|
@@ -15,19 +15,22 @@
|
|
|
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
|
// toQueryString does what jQuery's .param() does, only without having to bring in
|
|
19
20
|
// all of jQuery.
|
|
21
|
+
|
|
20
22
|
// URLSearchParams turns arrays into queries like a=1,2,3
|
|
21
23
|
// But our jQuery makes the older "PHP" style like a[]=1&a[]=2&a[]=3
|
|
22
24
|
// JQuery also magically deals with parameters that are functions, and recursive
|
|
23
25
|
// objects within objects, {a: 1, b: {c: 2, d: 3}, e: 4} => a=1&b[c]=2&b[d]=3&e=4
|
|
24
26
|
// ... so we have to do a lot of massaging with the params object before using it
|
|
25
27
|
// So fun!
|
|
28
|
+
|
|
26
29
|
export function toQueryString(params) {
|
|
27
|
-
const paramsWithIndexes = [];
|
|
30
|
+
const paramsWithIndexes = [];
|
|
28
31
|
|
|
32
|
+
// fix up the array/object indexes to match the PHP standard
|
|
29
33
|
const fixIndexes = elt => [elt[0].replace(/\[\d+\]$/, '[]').replace(/{/g, '[').replace(/}/g, ']'), elt[1]];
|
|
30
|
-
|
|
31
34
|
function serialize(k, elt, suffix) {
|
|
32
35
|
if (elt instanceof Function) {
|
|
33
36
|
paramsWithIndexes.push([k + suffix, elt()]);
|
|
@@ -45,7 +48,6 @@ export function toQueryString(params) {
|
|
|
45
48
|
paramsWithIndexes.push([k + suffix, elt]);
|
|
46
49
|
}
|
|
47
50
|
}
|
|
48
|
-
|
|
49
51
|
Object.keys(params).forEach(k => serialize(k, params[k], ''));
|
|
50
52
|
return new URLSearchParams(paramsWithIndexes.map(fixIndexes)).toString();
|
|
51
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,67 @@ 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
81
|
var _RCEGlobals$getFeatur;
|
|
91
|
-
|
|
92
82
|
// why oh why aren't we consistent?
|
|
93
83
|
const content_type = file['content-type'] || file.content_type || file.type;
|
|
84
|
+
if (typeof content_type !== 'string') throw new Error('Invalid content type');
|
|
94
85
|
const type = content_type.replace(/\/.*$/, '');
|
|
95
|
-
|
|
86
|
+
const baseOrigin = canvasOrigin !== null && canvasOrigin !== void 0 ? canvasOrigin : window.location.origin;
|
|
96
87
|
if ((_RCEGlobals$getFeatur = RCEGlobals.getFeatures()) !== null && _RCEGlobals$getFeatur !== void 0 && _RCEGlobals$getFeatur.media_links_use_attachment_id && isAudioOrVideo(content_type) && file.id) {
|
|
97
88
|
var _RCEGlobals$getFeatur2;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
url.
|
|
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;
|
|
89
|
+
const url = new URL(`/media_attachments_iframe/${file.id}`, baseOrigin);
|
|
90
|
+
url.searchParams.set('type', type);
|
|
91
|
+
url.searchParams.set('embedded', 'true');
|
|
92
|
+
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)) {
|
|
93
|
+
url.searchParams.set('verifier', file.uuid);
|
|
105
94
|
} else if (file.url || file.href) {
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
95
|
+
const href = file.url || file.href;
|
|
96
|
+
if (typeof href !== 'string') {
|
|
97
|
+
throw new Error('Invalid URL');
|
|
98
|
+
}
|
|
99
|
+
const parsedUrl = new URL(href, baseOrigin);
|
|
100
|
+
const verifier = parsedUrl.searchParams.get('verifier');
|
|
101
|
+
if (verifier) {
|
|
102
|
+
url.searchParams.set('verifier', verifier);
|
|
110
103
|
}
|
|
111
104
|
}
|
|
112
|
-
|
|
113
|
-
return format(url);
|
|
105
|
+
return url.toString().replace(baseOrigin, '');
|
|
114
106
|
}
|
|
115
|
-
|
|
116
107
|
if (file.embedded_iframe_url) {
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
return `${absoluteToRelativeUrl(file.embedded_iframe_url, canvasOrigin)}`;
|
|
108
|
+
const embedUrl = new URL(file.embedded_iframe_url, baseOrigin);
|
|
109
|
+
if (embedUrl.searchParams.has('type')) {
|
|
110
|
+
return absoluteToRelativeUrl(file.embedded_iframe_url, canvasOrigin);
|
|
121
111
|
}
|
|
122
|
-
|
|
123
|
-
return `${
|
|
112
|
+
const relative = absoluteToRelativeUrl(file.embedded_iframe_url, canvasOrigin);
|
|
113
|
+
return `${relative}?type=${type}`;
|
|
124
114
|
}
|
|
125
|
-
|
|
126
115
|
if (isAudioOrVideo(content_type)) {
|
|
127
116
|
var _file$embed;
|
|
128
|
-
|
|
129
117
|
const mediaEntryId = file.media_entry_id || ((_file$embed = file.embed) === null || _file$embed === void 0 ? void 0 : _file$embed.id) || file.mediaEntryId;
|
|
130
|
-
|
|
131
118
|
if (mediaEntryId && mediaEntryId !== 'maybe') {
|
|
132
119
|
return `/media_objects_iframe/${mediaEntryId}?type=${type}`;
|
|
133
120
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
121
|
+
const href = file.url || file.href;
|
|
122
|
+
if (typeof href !== 'string') {
|
|
123
|
+
throw new Error('Invalid URL');
|
|
124
|
+
}
|
|
125
|
+
const parsedUrl = new URL(href, baseOrigin);
|
|
126
|
+
const verifier = parsedUrl.searchParams.get('verifier');
|
|
127
|
+
const verifierParam = verifier ? `&verifier=${verifier}` : '';
|
|
128
|
+
return `/media_objects_iframe?mediahref=${parsedUrl.pathname}${verifierParam}&type=${type}`;
|
|
138
129
|
}
|
|
139
|
-
|
|
140
130
|
return undefined;
|
|
141
131
|
}
|
|
@@ -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,6 +15,7 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
export default function round(number) {
|
|
19
20
|
let decimalDigits = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
|
|
20
21
|
if (decimalDigits < 0) throw new Error('decimal digits must be >= 0');
|
|
@@ -15,17 +15,18 @@
|
|
|
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
|
+
|
|
22
|
+
// Adjusts the height that slide-out trays should take up based on the presence
|
|
20
23
|
// or absence of the masquerade bottom bar. Caches the result of this check
|
|
21
24
|
// forever, since we always reload the bundle when you enter/leave masquerade.
|
|
22
|
-
|
|
23
25
|
export const getTrayHeight = () => {
|
|
24
26
|
if (!trayHeight) {
|
|
25
27
|
const masqueradeBar = document.querySelector(MASQUERADE_SELECTOR);
|
|
26
28
|
trayHeight = masqueradeBar ? 'calc(100vh - 50px)' : '100vh';
|
|
27
29
|
}
|
|
28
|
-
|
|
29
30
|
return trayHeight;
|
|
30
31
|
};
|
|
31
32
|
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,7 +52,6 @@ const useDataUrl = () => {
|
|
|
50
52
|
setError(e);
|
|
51
53
|
}
|
|
52
54
|
}
|
|
53
|
-
|
|
54
55
|
if (url) {
|
|
55
56
|
fetchDataUrl().then(_ref => {
|
|
56
57
|
let {
|
|
@@ -72,5 +73,4 @@ const useDataUrl = () => {
|
|
|
72
73
|
dataBlob
|
|
73
74
|
};
|
|
74
75
|
};
|
|
75
|
-
|
|
76
76
|
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,8 +16,9 @@ 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';
|
|
@@ -30,7 +30,6 @@ export default class ColorField extends React.Component {
|
|
|
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,
|