@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,6 +15,7 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
import formatMessage from '../format-message';
|
|
19
20
|
import { showFlashAlert } from '../common/FlashAlert';
|
|
20
21
|
import { isPreviewable, loadDocPreview, removeLoadingImage, showLoadingImage } from './doc_previews';
|
|
@@ -23,45 +24,40 @@ import { parseUrlOrNull } from '../util/url-util';
|
|
|
23
24
|
const youTubeRegEx = /^https?:\/\/(www\.youtube\.com\/watch.*v(=|\/)|youtu\.be\/)([^&#]*)/;
|
|
24
25
|
export function youTubeID(path) {
|
|
25
26
|
const match = path.match(youTubeRegEx);
|
|
26
|
-
|
|
27
27
|
if (match && match[match.length - 1]) {
|
|
28
28
|
return match[match.length - 1];
|
|
29
29
|
}
|
|
30
|
-
|
|
31
30
|
return null;
|
|
32
31
|
}
|
|
33
32
|
export function getTld(hostname) {
|
|
34
33
|
hostname = (hostname || '').split(':')[0];
|
|
35
34
|
const parts = hostname.split('.'),
|
|
36
|
-
|
|
35
|
+
length = parts.length;
|
|
37
36
|
return (length > 1 ? [parts[length - 2], parts[length - 1]] : parts).join('.');
|
|
38
37
|
}
|
|
39
38
|
export function isExternalLink(element) {
|
|
40
39
|
let canvasOrigin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window.location.origin;
|
|
41
40
|
let canvasHost;
|
|
42
|
-
|
|
43
41
|
try {
|
|
44
42
|
canvasHost = new URL(canvasOrigin).hostname;
|
|
45
43
|
} catch (_ex) {
|
|
46
44
|
canvasHost = window.location.hostname;
|
|
47
45
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
const href = element.getAttribute('href');
|
|
47
|
+
// if a browser doesnt support <a>.hostname then just dont mark anything as external, better to not get false positives.
|
|
51
48
|
return !!(href && href.length && !href.match(/^(mailto\:|javascript\:)/) && element.hostname && getTld(element.hostname) !== getTld(canvasHost));
|
|
52
49
|
}
|
|
53
50
|
export function showFilePreview(event) {
|
|
54
51
|
var _event$target, _event$currentTarget;
|
|
55
|
-
|
|
56
52
|
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
57
53
|
event.stopPropagation();
|
|
58
54
|
const {
|
|
59
55
|
canvasOrigin,
|
|
60
56
|
disableGooglePreviews
|
|
61
|
-
} = {
|
|
57
|
+
} = {
|
|
58
|
+
...opts
|
|
62
59
|
};
|
|
63
60
|
let target = null;
|
|
64
|
-
|
|
65
61
|
if ((_event$target = event.target) !== null && _event$target !== void 0 && _event$target.href) {
|
|
66
62
|
target = event.target;
|
|
67
63
|
} else if ((_event$currentTarget = event.currentTarget) !== null && _event$currentTarget !== void 0 && _event$currentTarget.href) {
|
|
@@ -69,11 +65,9 @@ export function showFilePreview(event) {
|
|
|
69
65
|
} else {
|
|
70
66
|
return;
|
|
71
67
|
}
|
|
72
|
-
|
|
73
68
|
if (target.classList.contains('no_preview')) {
|
|
74
69
|
return;
|
|
75
70
|
}
|
|
76
|
-
|
|
77
71
|
if (target.classList.contains('inline_disabled') || target.classList.contains('preview_in_overlay')) {
|
|
78
72
|
showFilePreviewInOverlay(event, canvasOrigin);
|
|
79
73
|
} else {
|
|
@@ -82,23 +76,18 @@ export function showFilePreview(event) {
|
|
|
82
76
|
}
|
|
83
77
|
export function showFilePreviewInOverlay(event, canvasOrigin) {
|
|
84
78
|
var _event$target2, _event$currentTarget2, _target;
|
|
85
|
-
|
|
86
79
|
let target = null;
|
|
87
|
-
|
|
88
80
|
if ((_event$target2 = event.target) !== null && _event$target2 !== void 0 && _event$target2.href) {
|
|
89
81
|
target = event.target;
|
|
90
82
|
} else if ((_event$currentTarget2 = event.currentTarget) !== null && _event$currentTarget2 !== void 0 && _event$currentTarget2.href) {
|
|
91
83
|
target = event.currentTarget;
|
|
92
84
|
}
|
|
93
|
-
|
|
94
85
|
const matches = (_target = target) === null || _target === void 0 ? void 0 : _target.href.match(/\/files\/(\d+~\d+|\d+)/);
|
|
95
|
-
|
|
96
86
|
if (matches) {
|
|
97
87
|
if (event.ctrlKey || event.altKey || event.metaKey || event.shiftKey) {
|
|
98
88
|
// if any modifier keys are pressed, do the browser default thing
|
|
99
89
|
return;
|
|
100
90
|
}
|
|
101
|
-
|
|
102
91
|
event.preventDefault();
|
|
103
92
|
const url = new URL(target.href);
|
|
104
93
|
const verifier = url === null || url === void 0 ? void 0 : url.searchParams.get('verifier');
|
|
@@ -110,16 +99,14 @@ export function showFilePreviewInOverlay(event, canvasOrigin) {
|
|
|
110
99
|
file_id
|
|
111
100
|
};
|
|
112
101
|
if (verifier) params.verifier = verifier;
|
|
113
|
-
|
|
114
102
|
if (access_token && instfs_id) {
|
|
115
103
|
params.access_token = access_token;
|
|
116
104
|
params.instfs_id = instfs_id;
|
|
117
|
-
}
|
|
105
|
+
}
|
|
106
|
+
// TODO:
|
|
118
107
|
// 1. what window should we be using
|
|
119
108
|
// 2. is that the right origin?
|
|
120
109
|
// 3. this is temporary until we can decouple the file previewer from canvas
|
|
121
|
-
|
|
122
|
-
|
|
123
110
|
window.top.postMessage(params, canvasOrigin);
|
|
124
111
|
}
|
|
125
112
|
}
|
|
@@ -128,21 +115,19 @@ export function showFilePreviewInline(event, canvasOrigin, disableGooglePreviews
|
|
|
128
115
|
// if any modifier keys are pressed, do the browser default thing
|
|
129
116
|
return;
|
|
130
117
|
}
|
|
131
|
-
|
|
132
118
|
event.preventDefault();
|
|
133
119
|
const $link = event.currentTarget || event.target;
|
|
134
|
-
|
|
135
120
|
if ($link.getAttribute('aria-expanded') === 'true') {
|
|
136
121
|
// close the preview by clicking the "Minimize File Preview" link
|
|
137
122
|
const $preview = document.getElementById($link.getAttribute('aria-controls'));
|
|
138
123
|
$preview.querySelector('.hide_file_preview_link').click();
|
|
139
124
|
return;
|
|
140
125
|
}
|
|
141
|
-
|
|
142
126
|
showLoadingImage($link);
|
|
143
127
|
fetch($link.getAttribute('href').replace(/\/(download|preview)/, '') // download as part of the path
|
|
144
128
|
.replace(/wrap=1&?/, '') // wrap=1 as part of the query_string
|
|
145
|
-
.replace(/[?&]$/, ''),
|
|
129
|
+
.replace(/[?&]$/, ''),
|
|
130
|
+
// any trailing chars if wrap=1 was at the end
|
|
146
131
|
{
|
|
147
132
|
method: 'GET',
|
|
148
133
|
headers: {
|
|
@@ -156,16 +141,12 @@ export function showFilePreviewInline(event, canvasOrigin, disableGooglePreviews
|
|
|
156
141
|
const attachment = data && data.attachment;
|
|
157
142
|
removeLoadingImage($link);
|
|
158
143
|
let canvadoc_session_url = attachment.canvadoc_session_url;
|
|
159
|
-
|
|
160
144
|
if (attachment && (!disableGooglePreviews && isPreviewable(attachment.content_type) || canvadoc_session_url)) {
|
|
161
145
|
$link.setAttribute('aria-expanded', 'true');
|
|
162
|
-
|
|
163
146
|
if (canvasOrigin && canvadoc_session_url !== null) {
|
|
164
147
|
var _parseUrlOrNull;
|
|
165
|
-
|
|
166
148
|
canvadoc_session_url = (_parseUrlOrNull = parseUrlOrNull(canvadoc_session_url, canvasOrigin)) === null || _parseUrlOrNull === void 0 ? void 0 : _parseUrlOrNull.toString();
|
|
167
149
|
}
|
|
168
|
-
|
|
169
150
|
const $div = document.querySelector(`[id="${$link.getAttribute('aria-controls')}"]`);
|
|
170
151
|
$div.style.display = 'block';
|
|
171
152
|
loadDocPreview($div, {
|
|
@@ -185,7 +166,6 @@ export function showFilePreviewInline(event, canvasOrigin, disableGooglePreviews
|
|
|
185
166
|
resetInlinePreview($link, $div);
|
|
186
167
|
});
|
|
187
168
|
$div.prepend($minimizeLink);
|
|
188
|
-
|
|
189
169
|
if (Object.prototype.hasOwnProperty.call(event, 'originalEvent')) {
|
|
190
170
|
// Only focus this link if the open preview link was initiated by a real browser event
|
|
191
171
|
// If it was triggered by our auto_open stuff it shouldn't focus here.
|
|
@@ -196,19 +176,17 @@ export function showFilePreviewInline(event, canvasOrigin, disableGooglePreviews
|
|
|
196
176
|
showFlashAlert({
|
|
197
177
|
message: formatMessage('Failed getting file contents'),
|
|
198
178
|
type: 'error'
|
|
199
|
-
});
|
|
200
|
-
|
|
179
|
+
});
|
|
180
|
+
// eslint-disable-next-line no-console
|
|
201
181
|
console.error(ex);
|
|
202
182
|
resetInlinePreview($link);
|
|
203
183
|
removeLoadingImage($link);
|
|
204
184
|
});
|
|
205
185
|
}
|
|
206
|
-
|
|
207
186
|
function resetInlinePreview($link, $previewContainer) {
|
|
208
187
|
$link.setAttribute('aria-expanded', 'false');
|
|
209
188
|
show($link);
|
|
210
189
|
$link.focus();
|
|
211
|
-
|
|
212
190
|
if ($previewContainer) {
|
|
213
191
|
$previewContainer.innerHTML = '';
|
|
214
192
|
$previewContainer.style.display = 'none';
|
|
@@ -15,30 +15,29 @@
|
|
|
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 function hidden(elem) {
|
|
19
20
|
const width = elem.offsetWidth,
|
|
20
|
-
|
|
21
|
+
height = elem.offsetHeight;
|
|
21
22
|
return width === 0 && height === 0;
|
|
22
23
|
}
|
|
23
24
|
export function visible(elem) {
|
|
24
25
|
return !hidden(elem);
|
|
25
|
-
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// start: the element where we start
|
|
26
29
|
// selector: find an ancestor to elem that matches this
|
|
27
30
|
// context: optional DOM element within which the matching element may be found
|
|
28
|
-
|
|
29
31
|
export function closest(start, selector, context) {
|
|
30
32
|
const upperbound = context || document.body;
|
|
31
33
|
let elem = start;
|
|
32
|
-
|
|
33
34
|
while (elem) {
|
|
34
35
|
if (elem.matches(selector)) {
|
|
35
36
|
return elem;
|
|
36
37
|
}
|
|
37
|
-
|
|
38
38
|
if (elem === upperbound) {
|
|
39
39
|
return null;
|
|
40
40
|
}
|
|
41
|
-
|
|
42
41
|
elem = elem.parentElement;
|
|
43
42
|
}
|
|
44
43
|
}
|
|
@@ -51,7 +50,9 @@ export function show(elem) {
|
|
|
51
50
|
}
|
|
52
51
|
export function capitalize(word) {
|
|
53
52
|
return word.replace(/^./, letter => letter.toUpperCase());
|
|
54
|
-
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// this implementation of get|setData does not
|
|
55
56
|
// deal with elements being recreated in the dom
|
|
56
57
|
// but that seems to be OK
|
|
57
58
|
//
|
|
@@ -59,9 +60,7 @@ export function capitalize(word) {
|
|
|
59
60
|
// from canvas, there is other code that expects to use
|
|
60
61
|
// jquery data saved in enhanceUserContent, but if not
|
|
61
62
|
// so something useful anyway.
|
|
62
|
-
|
|
63
63
|
/* eslint-disable no-undef */
|
|
64
|
-
|
|
65
64
|
export function setData(elem, key, value) {
|
|
66
65
|
if (typeof $ !== 'undefined') {
|
|
67
66
|
$(elem).data(key, value);
|
|
@@ -74,11 +73,9 @@ export function getData(elem, key) {
|
|
|
74
73
|
if (typeof $ !== 'undefined') {
|
|
75
74
|
return $(elem).data(key);
|
|
76
75
|
}
|
|
77
|
-
|
|
78
76
|
if (elem.data && key in elem.data) {
|
|
79
77
|
return elem.data[key];
|
|
80
78
|
}
|
|
81
|
-
|
|
82
79
|
return elem.getAttribute(`data-${key}`);
|
|
83
80
|
}
|
|
84
81
|
/* eslint-enable no-undef */
|
|
@@ -15,11 +15,13 @@
|
|
|
15
15
|
* You should have received a copy of the GNU Affero General Public License along
|
|
16
16
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
|
+
|
|
18
19
|
const MathJaxDirective = Object.freeze({
|
|
19
20
|
Ignore: 'mathjax_ignore',
|
|
20
21
|
Process: 'mathjax_process'
|
|
21
|
-
});
|
|
22
|
+
});
|
|
22
23
|
|
|
24
|
+
// configure MathJax to use 'color' extension fo LaTeX coding
|
|
23
25
|
const localConfig = {
|
|
24
26
|
TeX: {
|
|
25
27
|
extensions: ['autoload-all.js']
|
|
@@ -47,7 +49,6 @@ const localConfig = {
|
|
|
47
49
|
showMathMenu: true,
|
|
48
50
|
messageStyle: 'none'
|
|
49
51
|
};
|
|
50
|
-
|
|
51
52
|
class Mathml {
|
|
52
53
|
constructor() {
|
|
53
54
|
let features = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
@@ -55,26 +56,21 @@ class Mathml {
|
|
|
55
56
|
this._features = features;
|
|
56
57
|
this._config = config;
|
|
57
58
|
}
|
|
58
|
-
|
|
59
59
|
loadMathJax() {
|
|
60
60
|
let configFile = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'TeX-MML-AM_SVG';
|
|
61
61
|
let cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
62
|
-
|
|
63
62
|
if (this.preventMathJax()) {
|
|
64
63
|
return;
|
|
65
64
|
}
|
|
66
|
-
|
|
67
65
|
if (!this.isMathJaxLoaded()) {
|
|
68
66
|
var _this$_features, _this$_config;
|
|
69
|
-
|
|
70
67
|
// Statically declare this in the localConfig above as part of MAT-1219
|
|
71
68
|
if ((_this$_features = this._features) !== null && _this$_features !== void 0 && _this$_features.explicit_latex_typesetting) {
|
|
72
69
|
localConfig.elements = document.getElementsByClassName(MathJaxDirective.Process);
|
|
73
70
|
localConfig.tex2jax.processClass = MathJaxDirective.Process;
|
|
74
71
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
72
|
+
const locale = ((_this$_config = this._config) === null || _this$_config === void 0 ? void 0 : _this$_config.locale) || 'en';
|
|
73
|
+
// signal local config to mathjax as it loads
|
|
78
74
|
window.MathJax = localConfig;
|
|
79
75
|
if (window.MathJaxIsLoading) return;
|
|
80
76
|
window.MathJaxIsLoading = true;
|
|
@@ -85,11 +81,10 @@ class Mathml {
|
|
|
85
81
|
script.onerror = reject;
|
|
86
82
|
script.async = true;
|
|
87
83
|
script.src = `//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=${configFile}&locale=${locale}`;
|
|
88
|
-
});
|
|
89
|
-
|
|
84
|
+
});
|
|
85
|
+
// eslint-disable-next-line promise/catch-or-return
|
|
90
86
|
scriptPromise.then(() => {
|
|
91
87
|
var _this$_features2;
|
|
92
|
-
|
|
93
88
|
window.MathJax.Hub.Register.StartupHook('MathMenu Ready', function () {
|
|
94
89
|
// get the mathjax context menu above the rce's equation editor
|
|
95
90
|
window.MathJax.Menu.BGSTYLE['z-index'] = 2000;
|
|
@@ -98,27 +93,23 @@ class Mathml {
|
|
|
98
93
|
// wait until MathJAx is configured before calling the callback
|
|
99
94
|
cb === null || cb === void 0 ? void 0 : cb();
|
|
100
95
|
});
|
|
101
|
-
|
|
102
96
|
if ((_this$_features2 = this._features) !== null && _this$_features2 !== void 0 && _this$_features2.new_math_equation_handling) {
|
|
103
97
|
window.MathJax.Hub.Register.MessageHook('Begin PreProcess', function (message) {
|
|
104
98
|
mathImageHelper.catchEquationImages(message[1]);
|
|
105
99
|
});
|
|
106
100
|
window.MathJax.Hub.Register.MessageHook('Math Processing Error', function (message) {
|
|
107
101
|
var _elem$parentElement;
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
102
|
+
const elem = Array.isArray(message[1]) ? message[1][0] : message[1];
|
|
103
|
+
// ".math_equation_latex" is the elem we added for MathJax to typeset the image equation
|
|
111
104
|
if ((_elem$parentElement = elem.parentElement) !== null && _elem$parentElement !== void 0 && _elem$parentElement.classList.contains('math_equation_latex')) {
|
|
112
105
|
var _elem$parentElement$p;
|
|
113
|
-
|
|
114
106
|
// The equation we image we were trying to replace and failed is up 1 and back 1.
|
|
115
107
|
// If we remove its "mathjaxified" attribute, the "End Math" handler
|
|
116
108
|
// won't remove it from the DOM.
|
|
117
109
|
if ((_elem$parentElement$p = elem.parentElement.previousElementSibling) !== null && _elem$parentElement$p !== void 0 && _elem$parentElement$p.hasAttribute('mathjaxified')) {
|
|
118
110
|
elem.parentElement.previousElementSibling.removeAttribute('mathjaxified');
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
|
|
111
|
+
}
|
|
112
|
+
// remove the "math processing error" mathjax output.
|
|
122
113
|
elem.parentElement.remove();
|
|
123
114
|
}
|
|
124
115
|
});
|
|
@@ -144,15 +135,15 @@ class Mathml {
|
|
|
144
135
|
element.remove();
|
|
145
136
|
});
|
|
146
137
|
});
|
|
147
|
-
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// leaving this here so I don't have to keep looking up how to see all messages
|
|
148
141
|
// window.MathJax.Hub.Startup.signal.Interest(function (message) {
|
|
149
142
|
// console.log('>>> MathJax startup:', message)
|
|
150
143
|
// })
|
|
151
144
|
// window.MathJax.Hub.signal.Interest(function(message) {
|
|
152
145
|
// console.log('>>> MathJax signal', message)
|
|
153
146
|
// })
|
|
154
|
-
|
|
155
|
-
|
|
156
147
|
delete window.MathJaxIsLoading;
|
|
157
148
|
});
|
|
158
149
|
} else {
|
|
@@ -164,113 +155,95 @@ class Mathml {
|
|
|
164
155
|
cb === null || cb === void 0 ? void 0 : cb();
|
|
165
156
|
}
|
|
166
157
|
}
|
|
167
|
-
|
|
168
158
|
preventMathJax() {
|
|
169
159
|
return /(?:rubrics|\/files)/.test(window.location.pathname);
|
|
170
160
|
}
|
|
171
|
-
|
|
172
161
|
isMathOnPage() {
|
|
173
162
|
return this.isMathInElement(document.body);
|
|
174
163
|
}
|
|
175
|
-
|
|
176
164
|
isMathInElement(elem) {
|
|
177
165
|
var _this$_features3;
|
|
178
|
-
|
|
179
166
|
if ((elem === null || elem === void 0 ? void 0 : elem.getAttribute('data-testid')) === 'mathml-preview-element') {
|
|
180
167
|
return true;
|
|
181
168
|
}
|
|
182
|
-
|
|
183
169
|
if ((_this$_features3 = this._features) !== null && _this$_features3 !== void 0 && _this$_features3.new_math_equation_handling) {
|
|
184
170
|
// handle the change from image + hidden mathml to mathjax formatted latex
|
|
185
171
|
if (elem.querySelector('.math_equation_latex,.math_equation_mml')) {
|
|
186
172
|
return true;
|
|
187
173
|
}
|
|
188
|
-
|
|
189
174
|
if (elem.querySelector('img.equation_image')) {
|
|
190
175
|
return true;
|
|
191
|
-
}
|
|
192
|
-
// looking for mathjax's opening delimiters
|
|
193
|
-
|
|
176
|
+
}
|
|
194
177
|
|
|
178
|
+
// look for latex the user may have entered w/o the equation editor by
|
|
179
|
+
// looking for mathjax's opening delimiters
|
|
195
180
|
if (/(?:\$\$|\\\()/.test(elem.textContent)) {
|
|
196
181
|
return true;
|
|
197
182
|
}
|
|
198
183
|
}
|
|
199
|
-
|
|
200
184
|
const mathElements = elem.getElementsByTagName('math');
|
|
201
|
-
|
|
202
185
|
for (let i = 0; i < mathElements.length; i++) {
|
|
203
186
|
const el = mathElements[i];
|
|
204
|
-
|
|
205
187
|
if (el.offsetParent !== null && !el.closest('.hidden-readable') && !el.closest('.MJX_Assistive_MathML') // already mathjax'd
|
|
206
188
|
) {
|
|
207
189
|
return true;
|
|
208
190
|
}
|
|
209
191
|
}
|
|
210
|
-
|
|
211
192
|
return false;
|
|
212
193
|
}
|
|
213
|
-
|
|
214
194
|
get mathJaxGenerated() {
|
|
215
195
|
return /^MathJax|MJX/;
|
|
216
|
-
}
|
|
217
|
-
|
|
196
|
+
}
|
|
218
197
|
|
|
198
|
+
// elements to ignore selector
|
|
219
199
|
get ignore_list() {
|
|
220
200
|
return '#header,#mobile-header,#left-side,#quiz-elapsed-time,.ui-menu-carat';
|
|
221
201
|
}
|
|
222
|
-
|
|
223
202
|
isMathJaxIgnored(elem) {
|
|
224
203
|
var _this$_features4, _elem$parentElement2;
|
|
225
|
-
|
|
226
204
|
if (!elem) return true;
|
|
227
|
-
|
|
228
205
|
if ((_this$_features4 = this._features) !== null && _this$_features4 !== void 0 && _this$_features4.explicit_latex_typesetting && !elem.classList.contains(MathJaxDirective.Process)) {
|
|
229
206
|
return true;
|
|
230
|
-
}
|
|
231
|
-
|
|
207
|
+
}
|
|
232
208
|
|
|
233
|
-
|
|
209
|
+
// ignore disconnected elements
|
|
210
|
+
if (!document.body.contains(elem)) return true;
|
|
234
211
|
|
|
212
|
+
// check if elem is in the ignore list
|
|
235
213
|
if (((_elem$parentElement2 = elem.parentElement) === null || _elem$parentElement2 === void 0 ? void 0 : _elem$parentElement2.querySelector(this.ignore_list)) === elem) {
|
|
236
214
|
return true;
|
|
237
|
-
}
|
|
238
|
-
|
|
215
|
+
}
|
|
239
216
|
|
|
217
|
+
// check if elem is a child of something we're ignoring
|
|
240
218
|
while (elem !== document.body) {
|
|
241
219
|
// child of ignored element?
|
|
242
220
|
if (elem.classList.contains(MathJaxDirective.Ignore)) {
|
|
243
221
|
return true;
|
|
244
|
-
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// // child of MathJax generated element?
|
|
245
225
|
// if (
|
|
246
226
|
// this.mathJaxGenerated.test(elem.id) ||
|
|
247
227
|
// this.mathJaxGenerated.test(elem.getAttribute('class'))
|
|
248
228
|
// ) {
|
|
249
229
|
// return true
|
|
250
230
|
// }
|
|
251
|
-
|
|
252
|
-
|
|
253
231
|
elem = elem.parentElement;
|
|
254
232
|
}
|
|
255
|
-
|
|
256
233
|
return false;
|
|
257
|
-
}
|
|
258
|
-
|
|
234
|
+
}
|
|
259
235
|
|
|
236
|
+
// legacy api
|
|
260
237
|
isMathMLOnPage() {
|
|
261
238
|
return this.isMathOnPage();
|
|
262
239
|
}
|
|
263
|
-
|
|
264
240
|
isMathJaxLoaded() {
|
|
265
241
|
var _window$MathJax;
|
|
266
|
-
|
|
267
242
|
return !!((_window$MathJax = window.MathJax) !== null && _window$MathJax !== void 0 && _window$MathJax.Hub);
|
|
268
243
|
}
|
|
269
|
-
|
|
270
244
|
shouldProcess(elem) {
|
|
271
245
|
return this.isMathInElement(elem) && !this.isMathJaxIgnored(elem);
|
|
272
246
|
}
|
|
273
|
-
|
|
274
247
|
processNewMathInElem(elem) {
|
|
275
248
|
if (this.shouldProcess(elem)) {
|
|
276
249
|
if (this.isMathJaxLoaded()) {
|
|
@@ -280,53 +253,43 @@ class Mathml {
|
|
|
280
253
|
}
|
|
281
254
|
}
|
|
282
255
|
}
|
|
256
|
+
|
|
283
257
|
/*
|
|
284
258
|
* elem: string with elementId or en elem object
|
|
285
259
|
*/
|
|
286
|
-
|
|
287
|
-
|
|
288
260
|
reloadElement(elem) {
|
|
289
261
|
if (this.isMathJaxLoaded()) {
|
|
290
262
|
window.MathJax.Hub.Queue(['Typeset', window.MathJax.Hub, elem]);
|
|
291
263
|
}
|
|
292
264
|
}
|
|
293
|
-
|
|
294
265
|
static get processNewMathEventName() {
|
|
295
266
|
return 'process-new-math';
|
|
296
267
|
}
|
|
297
|
-
|
|
298
268
|
}
|
|
299
|
-
|
|
300
269
|
const mathImageHelper = {
|
|
301
270
|
getImageEquationText(img) {
|
|
302
271
|
let equation_text;
|
|
303
272
|
const src = img.getAttribute('src');
|
|
304
|
-
|
|
305
273
|
if (src) {
|
|
306
274
|
try {
|
|
307
275
|
const url = new URL(src, 'http://localhost'); // we don't care about the host
|
|
308
|
-
|
|
309
276
|
const srceq = url.pathname.split('/equation_images/')[1];
|
|
310
|
-
|
|
311
277
|
if (srceq) {
|
|
312
278
|
equation_text = decodeURIComponent(decodeURIComponent(srceq));
|
|
313
279
|
}
|
|
314
|
-
} catch (_ex) {
|
|
280
|
+
} catch (_ex) {
|
|
281
|
+
// If we failed to parse the src URL, something is wrong.
|
|
315
282
|
}
|
|
316
283
|
}
|
|
317
|
-
|
|
318
284
|
return equation_text;
|
|
319
285
|
},
|
|
320
|
-
|
|
321
286
|
catchEquationImages(refnode) {
|
|
322
|
-
refnode = Array.isArray(refnode) ? refnode[0] : refnode;
|
|
323
|
-
|
|
287
|
+
refnode = Array.isArray(refnode) ? refnode[0] : refnode;
|
|
288
|
+
// find equation images and replace with inline LaTeX
|
|
324
289
|
const eqimgs = refnode.querySelectorAll('img.equation_image');
|
|
325
|
-
|
|
326
290
|
if (eqimgs.length > 0) {
|
|
327
291
|
eqimgs.forEach(img => {
|
|
328
292
|
const equation_text = this.getImageEquationText(img);
|
|
329
|
-
|
|
330
293
|
if (equation_text) {
|
|
331
294
|
img.setAttribute('mathjaxified', '');
|
|
332
295
|
const mathtex = document.createElement('span');
|
|
@@ -334,7 +297,6 @@ const mathImageHelper = {
|
|
|
334
297
|
mathtex.setAttribute('style', img.getAttribute('style'));
|
|
335
298
|
mathtex.textContent = `\\(${equation_text}\\)`;
|
|
336
299
|
mathtex.style.maxWidth = '';
|
|
337
|
-
|
|
338
300
|
if (img.nextSibling) {
|
|
339
301
|
img.parentElement.insertBefore(mathtex, img.nextSibling);
|
|
340
302
|
} else {
|
|
@@ -345,7 +307,6 @@ const mathImageHelper = {
|
|
|
345
307
|
return true;
|
|
346
308
|
}
|
|
347
309
|
},
|
|
348
|
-
|
|
349
310
|
removeStrayEquationImages(refnode) {
|
|
350
311
|
const eqimgs = refnode.querySelectorAll('img.equation_image');
|
|
351
312
|
eqimgs.forEach(img => {
|
|
@@ -354,35 +315,28 @@ const mathImageHelper = {
|
|
|
354
315
|
}
|
|
355
316
|
});
|
|
356
317
|
},
|
|
357
|
-
|
|
358
318
|
nearlyInfiniteStyleFix(elem) {
|
|
359
319
|
elem.querySelectorAll('[style*=clip], [style*=vertical-align]').forEach(e => {
|
|
360
320
|
let changed = false;
|
|
361
321
|
let s = e.getAttribute('style');
|
|
362
322
|
const r = e.style.clip;
|
|
363
|
-
|
|
364
323
|
if (/[\d.]+e\+?\d/.test(r)) {
|
|
365
324
|
// e.g. "rect(1e+07em, -9.999e+06em, -1e+07em, -999.997em)"
|
|
366
325
|
s = s.replace(/clip: rect[^;]+;/, '');
|
|
367
326
|
changed = true;
|
|
368
327
|
}
|
|
369
|
-
|
|
370
328
|
const v = e.style.verticalAlign;
|
|
371
|
-
|
|
372
329
|
if (Math.abs(parseFloat(v)) > 10000) {
|
|
373
330
|
// 10000 is a ridiculously large number
|
|
374
331
|
s = s.replace(/vertical-align[^;]+;/, '');
|
|
375
332
|
changed = true;
|
|
376
333
|
}
|
|
377
|
-
|
|
378
334
|
if (changed) {
|
|
379
335
|
e.setAttribute('style', s);
|
|
380
336
|
}
|
|
381
337
|
});
|
|
382
338
|
}
|
|
383
|
-
|
|
384
339
|
};
|
|
385
|
-
|
|
386
340
|
function handleNewMath(event) {
|
|
387
341
|
if (event !== null && event !== void 0 && event.detail) {
|
|
388
342
|
const {
|
|
@@ -394,6 +348,5 @@ function handleNewMath(event) {
|
|
|
394
348
|
mathml.processNewMathInElem(target);
|
|
395
349
|
}
|
|
396
350
|
}
|
|
397
|
-
|
|
398
351
|
window.addEventListener(Mathml.processNewMathEventName, handleNewMath);
|
|
399
352
|
export { Mathml, mathImageHelper, MathJaxDirective };
|