@instructure/canvas-rce 5.12.1 → 5.12.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 +8 -0
- package/babel-register.js +0 -7
- package/babel.config.cjs.js +0 -7
- package/babel.config.js +0 -9
- package/es/enhance-user-content/doc_previews.js +4 -0
- package/es/enhance-user-content/enhance_user_content.js +4 -59
- package/es/enhance-user-content/external_links.js +75 -0
- package/es/enhance-user-content/mathml.js +9 -7
- package/es/index.js +1 -1
- package/es/rce/RCEWrapper.js +3 -2322
- package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +1 -1
- package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +3 -11
- package/es/rce/plugins/instructure_equation/mathlive/index.js +5 -13
- package/es/rce/tinymce.oxide.content.min.css.js +732 -0
- package/es/rce/tinymce.oxide.skin.min.css.js +7 -0
- package/jest.config.js +0 -7
- package/package.json +1 -5
- package/scripts/build.js +1 -7
- package/lib/bridge/Bridge.js +0 -287
- package/lib/bridge/index.js +0 -21
- package/lib/canvasFileBrowser/FileBrowser.js +0 -457
- package/lib/canvasFileBrowser/en-US.js +0 -234
- package/lib/common/FlashAlert.js +0 -263
- package/lib/common/browser.js +0 -40
- package/lib/common/components/FileTree/File.js +0 -64
- package/lib/common/components/FileTree/Folder.js +0 -110
- package/lib/common/components/FileTree/index.js +0 -84
- package/lib/common/components/FileTree/styles.js +0 -72
- package/lib/common/components/Loading.js +0 -83
- package/lib/common/fileUrl.js +0 -152
- package/lib/common/getCookie.js +0 -32
- package/lib/common/incremental-loading/LoadMoreButton.js +0 -40
- package/lib/common/incremental-loading/LoadingIndicator.js +0 -36
- package/lib/common/incremental-loading/LoadingStatus.js +0 -47
- package/lib/common/incremental-loading/index.js +0 -21
- package/lib/common/incremental-loading/useIncrementalLoading.js +0 -58
- package/lib/common/indicate.js +0 -75
- package/lib/common/mimeClass.js +0 -120
- package/lib/common/natcompare.js +0 -47
- package/lib/defaultTinymceConfig.js +0 -160
- package/lib/elementDenylist.js +0 -19
- package/lib/enhance-user-content/doc_previews.js +0 -233
- package/lib/enhance-user-content/enhance_user_content.js +0 -396
- package/lib/enhance-user-content/index.js +0 -21
- package/lib/enhance-user-content/instructure_helper.js +0 -207
- package/lib/enhance-user-content/jqueryish_funcs.js +0 -88
- package/lib/enhance-user-content/mathml.js +0 -397
- package/lib/enhance-user-content/media_comment_thumbnail.js +0 -130
- package/lib/format-message.js +0 -30
- package/lib/getThemeVars.js +0 -46
- package/lib/getTranslations.js +0 -340
- package/lib/index.js +0 -51
- package/lib/rce/AlertMessageArea.js +0 -47
- package/lib/rce/DraggingBlocker.js +0 -43
- package/lib/rce/KeyboardShortcutModal.js +0 -88
- package/lib/rce/RCE.js +0 -150
- package/lib/rce/RCEGlobals.js +0 -62
- package/lib/rce/RCEWrapper.js +0 -4274
- package/lib/rce/RCEWrapperProps.js +0 -130
- package/lib/rce/RceHtmlEditor.js +0 -142
- package/lib/rce/ResizeHandle.js +0 -102
- package/lib/rce/RestoreAutoSaveModal.js +0 -82
- package/lib/rce/ShowOnFocusButton/index.js +0 -93
- package/lib/rce/StatusBar.js +0 -386
- package/lib/rce/__mocks__/_mockCryptoEs.js +0 -124
- package/lib/rce/__mocks__/styleMock.js +0 -18
- package/lib/rce/__mocks__/tinymceReact.js +0 -55
- package/lib/rce/alertHandler.js +0 -46
- package/lib/rce/contentInsertion.js +0 -325
- package/lib/rce/contentInsertionUtils.js +0 -85
- package/lib/rce/contentRendering.js +0 -145
- package/lib/rce/customEvents.js +0 -18
- package/lib/rce/editorLanguage.js +0 -101
- package/lib/rce/indicatorRegion.js +0 -49
- package/lib/rce/normalizeLocale.js +0 -50
- package/lib/rce/normalizeProps.js +0 -29
- package/lib/rce/plugins/instructure-ui-icons/plugin.js +0 -122
- package/lib/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +0 -24
- package/lib/rce/plugins/instructure_condensed_buttons/plugin.js +0 -27
- package/lib/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +0 -63
- package/lib/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +0 -48
- package/lib/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +0 -41
- package/lib/rce/plugins/instructure_condensed_buttons/ui/list-button.js +0 -145
- package/lib/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +0 -56
- package/lib/rce/plugins/instructure_documents/clickCallback.js +0 -23
- package/lib/rce/plugins/instructure_documents/components/DocumentsPanel.js +0 -120
- package/lib/rce/plugins/instructure_documents/components/Link.js +0 -219
- package/lib/rce/plugins/instructure_documents/plugin.js +0 -123
- package/lib/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +0 -25
- package/lib/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +0 -51
- package/lib/rce/plugins/instructure_equation/EquationEditorModal/index.js +0 -321
- package/lib/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +0 -116
- package/lib/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +0 -91
- package/lib/rce/plugins/instructure_equation/EquationEditorModal/styles.js +0 -46
- package/lib/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +0 -728
- package/lib/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +0 -84
- package/lib/rce/plugins/instructure_equation/MathIcon/index.js +0 -41
- package/lib/rce/plugins/instructure_equation/MathIcon/svgs.js +0 -236
- package/lib/rce/plugins/instructure_equation/clickCallback.js +0 -53
- package/lib/rce/plugins/instructure_equation/mathlive/index.js +0 -36
- package/lib/rce/plugins/instructure_equation/plugin.js +0 -69
- package/lib/rce/plugins/instructure_fullscreen/plugin.js +0 -50
- package/lib/rce/plugins/instructure_html_view/clickCallback.js +0 -21
- package/lib/rce/plugins/instructure_html_view/plugin.js +0 -37
- package/lib/rce/plugins/instructure_icon_maker/clickCallback.js +0 -57
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +0 -82
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +0 -56
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +0 -78
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +0 -36
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +0 -110
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +0 -169
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +0 -186
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +0 -243
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +0 -64
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +0 -73
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +0 -298
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +0 -86
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +0 -55
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +0 -70
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +0 -317
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +0 -149
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +0 -18
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +0 -32
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +0 -25
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +0 -60
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +0 -87
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +0 -139
- package/lib/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +0 -18
- package/lib/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +0 -323
- package/lib/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +0 -91
- package/lib/rce/plugins/instructure_icon_maker/plugin.js +0 -110
- package/lib/rce/plugins/instructure_icon_maker/reducers/imageSection.js +0 -194
- package/lib/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +0 -98
- package/lib/rce/plugins/instructure_icon_maker/registerEditToolbar.js +0 -56
- package/lib/rce/plugins/instructure_icon_maker/svg/clipPath.js +0 -25
- package/lib/rce/plugins/instructure_icon_maker/svg/constants.js +0 -100
- package/lib/rce/plugins/instructure_icon_maker/svg/font.js +0 -25
- package/lib/rce/plugins/instructure_icon_maker/svg/image.js +0 -354
- package/lib/rce/plugins/instructure_icon_maker/svg/index.js +0 -122
- package/lib/rce/plugins/instructure_icon_maker/svg/metadata.js +0 -48
- package/lib/rce/plugins/instructure_icon_maker/svg/settings.js +0 -179
- package/lib/rce/plugins/instructure_icon_maker/svg/shape.js +0 -316
- package/lib/rce/plugins/instructure_icon_maker/svg/text.js +0 -468
- package/lib/rce/plugins/instructure_icon_maker/svg/utils.js +0 -70
- package/lib/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +0 -45
- package/lib/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +0 -83
- package/lib/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +0 -28
- package/lib/rce/plugins/instructure_icon_maker/utils/iconValidation.js +0 -35
- package/lib/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +0 -375
- package/lib/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +0 -59
- package/lib/rce/plugins/instructure_image/ImageEmbedOptions.js +0 -202
- package/lib/rce/plugins/instructure_image/ImageList/Image.js +0 -106
- package/lib/rce/plugins/instructure_image/ImageList/index.js +0 -69
- package/lib/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +0 -166
- package/lib/rce/plugins/instructure_image/ImageOptionsTray/index.js +0 -246
- package/lib/rce/plugins/instructure_image/Images/index.js +0 -122
- package/lib/rce/plugins/instructure_image/clickCallback.js +0 -24
- package/lib/rce/plugins/instructure_image/plugin.js +0 -157
- package/lib/rce/plugins/instructure_links/clickCallback.js +0 -22
- package/lib/rce/plugins/instructure_links/components/AccordionSection.js +0 -60
- package/lib/rce/plugins/instructure_links/components/CollectionPanel.js +0 -84
- package/lib/rce/plugins/instructure_links/components/Link.js +0 -213
- package/lib/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +0 -127
- package/lib/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +0 -141
- package/lib/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +0 -125
- package/lib/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +0 -245
- package/lib/rce/plugins/instructure_links/components/LinkSet.js +0 -195
- package/lib/rce/plugins/instructure_links/components/LinksPanel.js +0 -100
- package/lib/rce/plugins/instructure_links/components/NavigationPanel.js +0 -141
- package/lib/rce/plugins/instructure_links/components/NoResults.js +0 -87
- package/lib/rce/plugins/instructure_links/components/propTypes.js +0 -41
- package/lib/rce/plugins/instructure_links/plugin.js +0 -294
- package/lib/rce/plugins/instructure_links/validateURL.js +0 -70
- package/lib/rce/plugins/instructure_media_embed/clickCallback.js +0 -48
- package/lib/rce/plugins/instructure_media_embed/components/Embed.js +0 -68
- package/lib/rce/plugins/instructure_media_embed/plugin.js +0 -36
- package/lib/rce/plugins/instructure_paste/pasteMenuCommand.js +0 -117
- package/lib/rce/plugins/instructure_paste/plugin.js +0 -174
- package/lib/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +0 -169
- package/lib/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +0 -225
- package/lib/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +0 -297
- package/lib/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +0 -46
- package/lib/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +0 -79
- package/lib/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +0 -153
- package/lib/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +0 -94
- package/lib/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +0 -90
- package/lib/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +0 -35
- package/lib/rce/plugins/instructure_rce_external_tools/dialog-helper.js +0 -29
- package/lib/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -55
- package/lib/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +0 -172
- package/lib/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +0 -203
- package/lib/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +0 -23
- package/lib/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +0 -111
- package/lib/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +0 -79
- package/lib/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +0 -47
- package/lib/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +0 -57
- package/lib/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +0 -26
- package/lib/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +0 -47
- package/lib/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +0 -67
- package/lib/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +0 -48
- package/lib/rce/plugins/instructure_rce_external_tools/plugin.js +0 -112
- package/lib/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +0 -27
- package/lib/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +0 -152
- package/lib/rce/plugins/instructure_record/AudioOptionsTray/index.js +0 -154
- package/lib/rce/plugins/instructure_record/MediaPanel/index.js +0 -123
- package/lib/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +0 -240
- package/lib/rce/plugins/instructure_record/VideoOptionsTray/index.js +0 -350
- package/lib/rce/plugins/instructure_record/clickCallback.js +0 -105
- package/lib/rce/plugins/instructure_record/mediaTranslations.js +0 -94
- package/lib/rce/plugins/instructure_record/plugin.js +0 -173
- package/lib/rce/plugins/instructure_studio_media_options/plugin.js +0 -42
- package/lib/rce/plugins/instructure_wordcount/clickCallback.js +0 -49
- package/lib/rce/plugins/instructure_wordcount/components/WordCountModal.js +0 -88
- package/lib/rce/plugins/instructure_wordcount/plugin.js +0 -30
- package/lib/rce/plugins/instructure_wordcount/utils/countContent.js +0 -78
- package/lib/rce/plugins/instructure_wordcount/utils/tableContent.js +0 -40
- package/lib/rce/plugins/shared/CanvasContentTray.js +0 -580
- package/lib/rce/plugins/shared/CheckerboardStyling.js +0 -25
- package/lib/rce/plugins/shared/ColorInput.js +0 -233
- package/lib/rce/plugins/shared/ConditionalTooltip.js +0 -32
- package/lib/rce/plugins/shared/ContentSelection.js +0 -269
- package/lib/rce/plugins/shared/DimensionUtils.js +0 -66
- package/lib/rce/plugins/shared/DimensionsInput/DimensionInput.js +0 -62
- package/lib/rce/plugins/shared/DimensionsInput/index.js +0 -161
- package/lib/rce/plugins/shared/DimensionsInput/useDimensionsState.js +0 -220
- package/lib/rce/plugins/shared/ErrorBoundary.js +0 -54
- package/lib/rce/plugins/shared/EventUtils.js +0 -39
- package/lib/rce/plugins/shared/Filter.js +0 -353
- package/lib/rce/plugins/shared/FixedContentTray.js +0 -115
- package/lib/rce/plugins/shared/ImageCropper/DirectionRegion.js +0 -67
- package/lib/rce/plugins/shared/ImageCropper/Modal.js +0 -153
- package/lib/rce/plugins/shared/ImageCropper/Preview.js +0 -148
- package/lib/rce/plugins/shared/ImageCropper/constants.js +0 -39
- package/lib/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +0 -83
- package/lib/rce/plugins/shared/ImageCropper/controls/ResetControls.js +0 -38
- package/lib/rce/plugins/shared/ImageCropper/controls/RotationControls.js +0 -89
- package/lib/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +0 -82
- package/lib/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +0 -111
- package/lib/rce/plugins/shared/ImageCropper/controls/index.js +0 -61
- package/lib/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +0 -94
- package/lib/rce/plugins/shared/ImageCropper/controls/utils.js +0 -41
- package/lib/rce/plugins/shared/ImageCropper/imageCropUtils.js +0 -149
- package/lib/rce/plugins/shared/ImageCropper/index.js +0 -18
- package/lib/rce/plugins/shared/ImageCropper/propTypes.js +0 -26
- package/lib/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +0 -72
- package/lib/rce/plugins/shared/ImageCropper/shape.js +0 -27
- package/lib/rce/plugins/shared/ImageCropper/svg/index.js +0 -89
- package/lib/rce/plugins/shared/ImageCropper/svg/shape.js +0 -125
- package/lib/rce/plugins/shared/ImageCropper/svg/utils.js +0 -26
- package/lib/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +0 -233
- package/lib/rce/plugins/shared/ImageCropper/useMouseWheel.js +0 -66
- package/lib/rce/plugins/shared/ImageOptionsForm.js +0 -140
- package/lib/rce/plugins/shared/LinkDisplay.js +0 -96
- package/lib/rce/plugins/shared/PreviewIcon.js +0 -112
- package/lib/rce/plugins/shared/Previewable.js +0 -22
- package/lib/rce/plugins/shared/RceFileBrowser.js +0 -106
- package/lib/rce/plugins/shared/StoreContext.js +0 -57
- package/lib/rce/plugins/shared/StudioLtiSupportUtils.js +0 -71
- package/lib/rce/plugins/shared/UnknownFileTypePanel.js +0 -29
- package/lib/rce/plugins/shared/Upload/CategoryProcessor.js +0 -27
- package/lib/rce/plugins/shared/Upload/ComputerPanel.js +0 -334
- package/lib/rce/plugins/shared/Upload/SvgCategoryProcessor.js +0 -35
- package/lib/rce/plugins/shared/Upload/UploadFile.js +0 -171
- package/lib/rce/plugins/shared/Upload/UploadFileModal.js +0 -273
- package/lib/rce/plugins/shared/Upload/UrlPanel.js +0 -38
- package/lib/rce/plugins/shared/Upload/UsageRightsSelectBox.js +0 -172
- package/lib/rce/plugins/shared/Upload/doFileUpload.js +0 -77
- package/lib/rce/plugins/shared/__mocks__/screenfull.js +0 -24
- package/lib/rce/plugins/shared/buildDownloadUrl.js +0 -31
- package/lib/rce/plugins/shared/compressionUtils.js +0 -98
- package/lib/rce/plugins/shared/dateUtils.js +0 -28
- package/lib/rce/plugins/shared/fileShape.js +0 -129
- package/lib/rce/plugins/shared/fileTypeUtils.js +0 -139
- package/lib/rce/plugins/shared/fileUtils.js +0 -25
- package/lib/rce/plugins/shared/linkUtils.js +0 -89
- package/lib/rce/plugins/shared/round.js +0 -25
- package/lib/rce/plugins/shared/trayUtils.js +0 -34
- package/lib/rce/plugins/shared/useDataUrl.js +0 -76
- package/lib/rce/plugins/tinymce-a11y-checker/components/ColorField.js +0 -86
- package/lib/rce/plugins/tinymce-a11y-checker/components/checker.js +0 -558
- package/lib/rce/plugins/tinymce-a11y-checker/components/color-picker.js +0 -59
- package/lib/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +0 -90
- package/lib/rce/plugins/tinymce-a11y-checker/components/pointer.js +0 -32
- package/lib/rce/plugins/tinymce-a11y-checker/node-checker.js +0 -54
- package/lib/rce/plugins/tinymce-a11y-checker/plugin.js +0 -90
- package/lib/rce/plugins/tinymce-a11y-checker/rules/__mocks__/index.js +0 -53
- package/lib/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +0 -129
- package/lib/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +0 -200
- package/lib/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +0 -67
- package/lib/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +0 -63
- package/lib/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +0 -49
- package/lib/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +0 -61
- package/lib/rce/plugins/tinymce-a11y-checker/rules/index.js +0 -31
- package/lib/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +0 -51
- package/lib/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +0 -144
- package/lib/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +0 -61
- package/lib/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +0 -75
- package/lib/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +0 -54
- package/lib/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +0 -52
- package/lib/rce/plugins/tinymce-a11y-checker/rules/table-header.js +0 -81
- package/lib/rce/plugins/tinymce-a11y-checker/utils/colors.js +0 -43
- package/lib/rce/plugins/tinymce-a11y-checker/utils/describe.js +0 -66
- package/lib/rce/plugins/tinymce-a11y-checker/utils/dom.js +0 -160
- package/lib/rce/plugins/tinymce-a11y-checker/utils/indicate.js +0 -83
- package/lib/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +0 -57
- package/lib/rce/plugins/tinymce-a11y-checker/utils/strings.js +0 -40
- package/lib/rce/root.js +0 -58
- package/lib/rce/sanitizePlugins.js +0 -32
- package/lib/rce/style.js +0 -843
- package/lib/rce/tinyRCE.js +0 -66
- package/lib/rce/transformContent.js +0 -73
- package/lib/rce/userOS.js +0 -31
- package/lib/rce/wrapInitCb.js +0 -78
- package/lib/rcs/api.js +0 -672
- package/lib/rcs/buildError.js +0 -98
- package/lib/rcs/fake.js +0 -621
- package/lib/sidebar/actions/all_files.js +0 -29
- package/lib/sidebar/actions/data.js +0 -105
- package/lib/sidebar/actions/documents.js +0 -107
- package/lib/sidebar/actions/files.js +0 -167
- package/lib/sidebar/actions/filter.js +0 -63
- package/lib/sidebar/actions/flickr.js +0 -60
- package/lib/sidebar/actions/images.js +0 -153
- package/lib/sidebar/actions/links.js +0 -23
- package/lib/sidebar/actions/media.js +0 -142
- package/lib/sidebar/actions/session.js +0 -34
- package/lib/sidebar/actions/ui.js +0 -49
- package/lib/sidebar/actions/upload.js +0 -550
- package/lib/sidebar/containers/Sidebar.js +0 -67
- package/lib/sidebar/containers/sidebarHandlers.js +0 -73
- package/lib/sidebar/dragHtml.js +0 -49
- package/lib/sidebar/reducers/all_files.js +0 -35
- package/lib/sidebar/reducers/collection.js +0 -72
- package/lib/sidebar/reducers/collections.js +0 -52
- package/lib/sidebar/reducers/documents.js +0 -89
- package/lib/sidebar/reducers/files.js +0 -38
- package/lib/sidebar/reducers/filter.js +0 -61
- package/lib/sidebar/reducers/flickr.js +0 -51
- package/lib/sidebar/reducers/folder.js +0 -92
- package/lib/sidebar/reducers/folders.js +0 -39
- package/lib/sidebar/reducers/images.js +0 -115
- package/lib/sidebar/reducers/index.js +0 -57
- package/lib/sidebar/reducers/media.js +0 -84
- package/lib/sidebar/reducers/newPageLinkExpanded.js +0 -30
- package/lib/sidebar/reducers/noop.js +0 -21
- package/lib/sidebar/reducers/rootFolderId.js +0 -30
- package/lib/sidebar/reducers/session.js +0 -33
- package/lib/sidebar/reducers/ui.js +0 -87
- package/lib/sidebar/reducers/upload.js +0 -206
- package/lib/sidebar/store/configureStore.js +0 -26
- package/lib/sidebar/store/initialState.js +0 -173
- package/lib/translations/locales/ab.js +0 -26
- package/lib/translations/locales/ar.js +0 -2427
- package/lib/translations/locales/ca.js +0 -2427
- package/lib/translations/locales/cs.js +0 -27
- package/lib/translations/locales/cs_CZ.js +0 -27
- package/lib/translations/locales/cy.js +0 -2427
- package/lib/translations/locales/da-x-k12.js +0 -2427
- package/lib/translations/locales/da.js +0 -2427
- package/lib/translations/locales/da_DK.js +0 -27
- package/lib/translations/locales/de.js +0 -2427
- package/lib/translations/locales/el.js +0 -459
- package/lib/translations/locales/en-AU-x-unimelb.js +0 -2427
- package/lib/translations/locales/en-GB-x-ukhe.js +0 -2427
- package/lib/translations/locales/en.js +0 -2427
- package/lib/translations/locales/en_AU.js +0 -2427
- package/lib/translations/locales/en_CA.js +0 -2426
- package/lib/translations/locales/en_CY.js +0 -2426
- package/lib/translations/locales/en_GB.js +0 -2427
- package/lib/translations/locales/en_NZ.js +0 -26
- package/lib/translations/locales/en_SE.js +0 -26
- package/lib/translations/locales/en_US.js +0 -26
- package/lib/translations/locales/es.js +0 -2427
- package/lib/translations/locales/es_ES.js +0 -2427
- package/lib/translations/locales/es_GT.js +0 -27
- package/lib/translations/locales/fa_IR.js +0 -615
- package/lib/translations/locales/fi.js +0 -2427
- package/lib/translations/locales/fr.js +0 -2427
- package/lib/translations/locales/fr_CA.js +0 -2427
- package/lib/translations/locales/he.js +0 -486
- package/lib/translations/locales/ht.js +0 -2426
- package/lib/translations/locales/hu.js +0 -2007
- package/lib/translations/locales/hu_HU.js +0 -27
- package/lib/translations/locales/hy.js +0 -444
- package/lib/translations/locales/id.js +0 -2426
- package/lib/translations/locales/id_ID.js +0 -26
- package/lib/translations/locales/is.js +0 -2426
- package/lib/translations/locales/it.js +0 -2427
- package/lib/translations/locales/ja.js +0 -2427
- package/lib/translations/locales/ko.js +0 -342
- package/lib/translations/locales/ko_KR.js +0 -27
- package/lib/translations/locales/lt.js +0 -26
- package/lib/translations/locales/lt_LT.js +0 -26
- package/lib/translations/locales/mi.js +0 -2426
- package/lib/translations/locales/mn_MN.js +0 -26
- package/lib/translations/locales/ms.js +0 -2426
- package/lib/translations/locales/nb-x-k12.js +0 -2427
- package/lib/translations/locales/nb.js +0 -2427
- package/lib/translations/locales/nl.js +0 -2427
- package/lib/translations/locales/nl_NL.js +0 -27
- package/lib/translations/locales/nn.js +0 -2247
- package/lib/translations/locales/pl.js +0 -2427
- package/lib/translations/locales/pt.js +0 -2427
- package/lib/translations/locales/pt_BR.js +0 -2427
- package/lib/translations/locales/ro.js +0 -27
- package/lib/translations/locales/ru.js +0 -2427
- package/lib/translations/locales/se.js +0 -26
- package/lib/translations/locales/sl.js +0 -2427
- package/lib/translations/locales/sv-x-k12.js +0 -2427
- package/lib/translations/locales/sv.js +0 -2427
- package/lib/translations/locales/sv_SE.js +0 -27
- package/lib/translations/locales/tg.js +0 -26
- package/lib/translations/locales/th.js +0 -2427
- package/lib/translations/locales/th_TH.js +0 -27
- package/lib/translations/locales/tl_PH.js +0 -26
- package/lib/translations/locales/tr.js +0 -687
- package/lib/translations/locales/uk_UA.js +0 -519
- package/lib/translations/locales/vi.js +0 -2427
- package/lib/translations/locales/vi_VN.js +0 -27
- package/lib/translations/locales/zh-Hans.js +0 -2427
- package/lib/translations/locales/zh-Hant.js +0 -2427
- package/lib/translations/locales/zh.js +0 -2427
- package/lib/translations/locales/zh_HK.js +0 -2427
- package/lib/translations/locales/zh_TW.Big5.js +0 -27
- package/lib/translations/locales/zh_TW.js +0 -27
- package/lib/translations/tinymce/ar_SA.js +0 -211
- package/lib/translations/tinymce/bg_BG.js +0 -419
- package/lib/translations/tinymce/ca.js +0 -419
- package/lib/translations/tinymce/cs.js +0 -419
- package/lib/translations/tinymce/cy.js +0 -418
- package/lib/translations/tinymce/da.js +0 -419
- package/lib/translations/tinymce/de.js +0 -419
- package/lib/translations/tinymce/el.js +0 -261
- package/lib/translations/tinymce/en_GB.js +0 -230
- package/lib/translations/tinymce/es.js +0 -419
- package/lib/translations/tinymce/fa_IR.js +0 -390
- package/lib/translations/tinymce/fi.js +0 -19
- package/lib/translations/tinymce/fr_FR.js +0 -419
- package/lib/translations/tinymce/he_IL.js +0 -420
- package/lib/translations/tinymce/hu_HU.js +0 -419
- package/lib/translations/tinymce/hy.js +0 -419
- package/lib/translations/tinymce/it.js +0 -419
- package/lib/translations/tinymce/ja.js +0 -419
- package/lib/translations/tinymce/ko_KR.js +0 -419
- package/lib/translations/tinymce/nb_NO.js +0 -419
- package/lib/translations/tinymce/nl.js +0 -419
- package/lib/translations/tinymce/pl.js +0 -419
- package/lib/translations/tinymce/pt_BR.js +0 -419
- package/lib/translations/tinymce/pt_PT.js +0 -419
- package/lib/translations/tinymce/ro.js +0 -418
- package/lib/translations/tinymce/ru.js +0 -436
- package/lib/translations/tinymce/ru_RU.js +0 -71
- package/lib/translations/tinymce/sl.js +0 -462
- package/lib/translations/tinymce/sr.js +0 -278
- package/lib/translations/tinymce/sv_SE.js +0 -419
- package/lib/translations/tinymce/th.js +0 -479
- package/lib/translations/tinymce/tr_TR.js +0 -389
- package/lib/translations/tinymce/uk_UA.js +0 -278
- package/lib/translations/tinymce/vi_VN.js +0 -277
- package/lib/translations/tinymce/zh_CN.js +0 -419
- package/lib/translations/tinymce/zh_TW.js +0 -419
- package/lib/util/DeepPartialNullable.js +0 -1
- package/lib/util/ExtractRequired.js +0 -1
- package/lib/util/TypedDict.js +0 -131
- package/lib/util/assertNever.js +0 -44
- package/lib/util/elem-util.js +0 -26
- package/lib/util/encrypted-storage.js +0 -84
- package/lib/util/file-url-util.js +0 -44
- package/lib/util/fullscreenHelpers.js +0 -27
- package/lib/util/instui-icon-helper.js +0 -31
- package/lib/util/loadingPlaceholder.js +0 -436
- package/lib/util/simpleCache.js +0 -41
- package/lib/util/string-util.js +0 -48
- package/lib/util/textarea-editing-util.js +0 -87
- package/lib/util/tinymce-plugin-util.js +0 -52
- package/lib/util/url-util.js +0 -138
|
@@ -1,325 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (C) 2018 - present Instructure, Inc.
|
|
3
|
-
*
|
|
4
|
-
* This file is part of Canvas.
|
|
5
|
-
*
|
|
6
|
-
* Canvas is free software: you can redistribute it and/or modify it under
|
|
7
|
-
* the terms of the GNU Affero General Public License as published by the Free
|
|
8
|
-
* Software Foundation, version 3 of the License.
|
|
9
|
-
*
|
|
10
|
-
* Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
11
|
-
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
12
|
-
* A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
13
|
-
* details.
|
|
14
|
-
*
|
|
15
|
-
* You should have received a copy of the GNU Affero General Public License along
|
|
16
|
-
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
-
*/
|
|
18
|
-
import classnames from 'classnames';
|
|
19
|
-
import { renderAudio, renderImage, renderLink, renderLinkedImage, renderVideo } from './contentRendering';
|
|
20
|
-
import { cleanUrl, getAnchorElement, isImageFigure, isOnlyTextSelected } from './contentInsertionUtils';
|
|
21
|
-
import { mediaPlayerURLFromFile } from './plugins/shared/fileTypeUtils';
|
|
22
|
-
import { absoluteToRelativeUrl } from '../common/fileUrl';
|
|
23
|
-
/** * generic content insertion ** */
|
|
24
|
-
// when the editor is hidden, just replace the selected portion of the textarea
|
|
25
|
-
// with the content. branching is for cross-browser
|
|
26
|
-
|
|
27
|
-
function replaceTextareaSelection(editor, content) {
|
|
28
|
-
const element = editor.getElement();
|
|
29
|
-
|
|
30
|
-
if ('selectionStart' in element) {
|
|
31
|
-
// mozilla / dom 3.0
|
|
32
|
-
const before = element.value.substr(0, element.selectionStart);
|
|
33
|
-
const after = element.value.substr(element.selectionEnd, element.value.length);
|
|
34
|
-
element.value = before + content + after;
|
|
35
|
-
} else if (document.selection) {
|
|
36
|
-
// exploder
|
|
37
|
-
element.focus();
|
|
38
|
-
document.selection.createRange().text = content;
|
|
39
|
-
} else {
|
|
40
|
-
// browser not supported
|
|
41
|
-
element.value += content;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export function insertContent(editor, content) {
|
|
46
|
-
if (editor.isHidden()) {
|
|
47
|
-
// replaces the textarea selection with the new image. no element returned
|
|
48
|
-
// to indicate because it's raw html.
|
|
49
|
-
replaceTextareaSelection(editor, content);
|
|
50
|
-
return null;
|
|
51
|
-
} else {
|
|
52
|
-
// inserts content at the cursor. getEnd() of the selection after the
|
|
53
|
-
// insertion should reference the newly created node (or first of the newly
|
|
54
|
-
// created nodes if there were multiple, unfortunately), because the cursor
|
|
55
|
-
// itself stays just before the new content.
|
|
56
|
-
setTimeout(() => {
|
|
57
|
-
if (editor.iframeElement) {
|
|
58
|
-
editor.iframeElement.scrollIntoView();
|
|
59
|
-
}
|
|
60
|
-
}, 100); // there's a bug in tinymce where insertContent calls execCommand('mceInsertContent'),
|
|
61
|
-
// but doesn't correctly forward the second "args" argument. Let's go right for
|
|
62
|
-
// execCommand
|
|
63
|
-
// editor.insertContent(content, {skip_focus: true})
|
|
64
|
-
|
|
65
|
-
editor.execCommand('mceInsertContent', false, content, {
|
|
66
|
-
skip_focus: true
|
|
67
|
-
});
|
|
68
|
-
return editor.selection.getEnd();
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
/** * image insertion ** */
|
|
72
|
-
|
|
73
|
-
function isElemImg(elem) {
|
|
74
|
-
return elem && elem.nodeName.toLowerCase() === 'img';
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
function isElemAnchor(elem) {
|
|
78
|
-
return elem && elem.nodeName.toLowerCase() === 'a';
|
|
79
|
-
}
|
|
80
|
-
/*
|
|
81
|
-
check if we should preserve the parent anchor tag. the criteria is pretty
|
|
82
|
-
strict based on if we have a single image selected with an anchor tag
|
|
83
|
-
surrounding
|
|
84
|
-
*/
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
function shouldPreserveImgAnchor(editor) {
|
|
88
|
-
const selection = editor.selection;
|
|
89
|
-
const selectedRange = selection.getRng();
|
|
90
|
-
return isElemImg(selection.getNode()) && isElemAnchor(selectedRange.startContainer) && selectedRange.startContainer === selectedRange.endContainer;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export function insertImage(editor, image, canvasOrigin) {
|
|
94
|
-
let content = '';
|
|
95
|
-
|
|
96
|
-
if (shouldPreserveImgAnchor(editor)) {
|
|
97
|
-
content = renderLinkedImage(editor.selection.getRng().startContainer, image, canvasOrigin);
|
|
98
|
-
} else {
|
|
99
|
-
// render the image, constraining its size on insertion
|
|
100
|
-
const imgNode = editor.selection.getNode(); // apply selected styles only in course/user images
|
|
101
|
-
|
|
102
|
-
if (isElemImg(imgNode) && !image['data-inst-icon-maker-icon']) {
|
|
103
|
-
const customStyles = imgNode.style;
|
|
104
|
-
const customWidth = imgNode.getAttribute('width');
|
|
105
|
-
const parseStyles = {};
|
|
106
|
-
|
|
107
|
-
for (let i = 0; i < customStyles.length; ++i) {
|
|
108
|
-
const cssAttribute = customStyles.item(i);
|
|
109
|
-
parseStyles[cssAttribute] = customStyles[cssAttribute];
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
image.width = customWidth;
|
|
113
|
-
image.style = parseStyles;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
content = renderImage({ ...image
|
|
117
|
-
}, canvasOrigin);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
return insertContent(editor, content);
|
|
121
|
-
}
|
|
122
|
-
export function insertEquation(editor, latex) {
|
|
123
|
-
const docSz = parseFloat(editor.dom.doc.defaultView.getComputedStyle(editor.dom.doc.body).getPropertyValue('font-size')) || 1;
|
|
124
|
-
const sel = editor.selection.getNode();
|
|
125
|
-
const imgSz = sel ? parseFloat(editor.dom.doc.defaultView.getComputedStyle(sel).getPropertyValue('font-size')) || 1 : docSz;
|
|
126
|
-
const scale = imgSz / docSz;
|
|
127
|
-
const url = `/equation_images/${encodeURIComponent(encodeURIComponent(latex))}?scale=${scale}`; // if I simply create the html string, xsslint fails jenkins
|
|
128
|
-
|
|
129
|
-
const img = document.createElement('img');
|
|
130
|
-
img.setAttribute('alt', `LaTeX: ${latex}`);
|
|
131
|
-
img.setAttribute('title', latex);
|
|
132
|
-
img.setAttribute('class', 'equation_image');
|
|
133
|
-
img.setAttribute('data-equation-content', latex);
|
|
134
|
-
img.setAttribute('src', url);
|
|
135
|
-
img.setAttribute('data-ignore-a11y-check', '');
|
|
136
|
-
return insertContent(editor, img.outerHTML);
|
|
137
|
-
}
|
|
138
|
-
/** * link insertion ** */
|
|
139
|
-
// checks if there's an existing anchor containing the cursor
|
|
140
|
-
|
|
141
|
-
function currentLink(editor, link) {
|
|
142
|
-
const cursor = link.selectionDetails && link.selectionDetails.node ? link.selectionDetails.node : editor.selection.getNode(); // This doesn't work in IE 11, but will stop brokeness in other browsers
|
|
143
|
-
|
|
144
|
-
return editor.dom.getParent(cursor, 'a');
|
|
145
|
-
} // checks if the editor has a current selection (vs. just a cursor position)
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
function hasSelection(editor) {
|
|
149
|
-
let selection = editor.selection.getContent();
|
|
150
|
-
selection = editor.dom.decode(selection);
|
|
151
|
-
return !!selection && selection !== '';
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
export function existingContentToLink(editor, link) {
|
|
155
|
-
return !editor.isHidden() && (link && (currentLink(editor, link) || !!link.selectedContent) || hasSelection(editor));
|
|
156
|
-
} // Parses HTML string with support in old browsers because jQuery's parseHTML was added in 1.8.
|
|
157
|
-
|
|
158
|
-
function parseHTML(htmlString) {
|
|
159
|
-
const tmp = document.implementation.createHTMLDocument();
|
|
160
|
-
tmp.body.innerHTML = htmlString.trim();
|
|
161
|
-
return tmp.body.children;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
function selectionIsImg(editor) {
|
|
165
|
-
const selection = editor.selection.getContent();
|
|
166
|
-
return editor.dom.$(parseHTML(selection)).is('img');
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
export function existingContentToLinkIsImg(editor) {
|
|
170
|
-
return !editor.isHidden() && selectionIsImg(editor);
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
function decorateLinkWithEmbed(link) {
|
|
174
|
-
const type = link.embed && link.embed.type;
|
|
175
|
-
link.class = classnames(link.class, {
|
|
176
|
-
instructure_file_link: true,
|
|
177
|
-
instructure_scribd_file: type === 'scribd' || link['data-canvas-previewable'],
|
|
178
|
-
instructure_image_thumbnail: type === 'image',
|
|
179
|
-
instructure_video_link: type === 'video',
|
|
180
|
-
instructure_audio_link: type === 'audio',
|
|
181
|
-
auto_open: link.embed && link.embed.autoOpenPreview,
|
|
182
|
-
inline_disabled: link.embed && link.embed.disableInlinePreview,
|
|
183
|
-
no_preview: link.embed && link.embed.noPreview
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
if (link.embed.type === 'video' || link.embed.type === 'audio') {
|
|
187
|
-
link.id = `media_comment_${link.embed.id || 'maybe'}`;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
export function insertLink(editor, link, canvasOrigin) {
|
|
192
|
-
const linkAttrs = { ...link
|
|
193
|
-
};
|
|
194
|
-
|
|
195
|
-
if (linkAttrs.embed) {
|
|
196
|
-
decorateLinkWithEmbed(linkAttrs);
|
|
197
|
-
delete linkAttrs.embed;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
return insertUndecoratedLink(editor, linkAttrs, canvasOrigin);
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
function textForLink(linkProps, editor, anchorElm) {
|
|
204
|
-
// Some actions (like editing the link text in the link tray)
|
|
205
|
-
// require an explicit update to the link text
|
|
206
|
-
if (linkProps.forceRename) return linkProps.text; // Other actions (link highlighting an existing link and changing
|
|
207
|
-
// the linked file) should use the anchor text if present
|
|
208
|
-
|
|
209
|
-
return getAnchorText(editor.selection, anchorElm) || linkProps.text;
|
|
210
|
-
} // link edit/create logic based on tinymce/plugins/link/plugin.ts
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
function insertUndecoratedLink(editor, linkProps, canvasOrigin) {
|
|
214
|
-
const selectedElm = editor.selection.getNode();
|
|
215
|
-
const anchorElm = getAnchorElement(editor, selectedElm);
|
|
216
|
-
const selectedContent = editor.selection.getContent();
|
|
217
|
-
const selectedPlainText = editor.selection.getContent({
|
|
218
|
-
format: 'text'
|
|
219
|
-
});
|
|
220
|
-
const onlyText = isOnlyTextSelected(selectedContent);
|
|
221
|
-
const linkText = onlyText && textForLink(linkProps, editor, anchorElm); // only keep the props we want as attributes on the <a>
|
|
222
|
-
|
|
223
|
-
const linkAttrs = {
|
|
224
|
-
id: linkProps.id,
|
|
225
|
-
href: absoluteToRelativeUrl(cleanUrl(linkProps.href || linkProps.url), canvasOrigin),
|
|
226
|
-
target: linkProps.target,
|
|
227
|
-
class: linkProps.class,
|
|
228
|
-
title: linkProps.title,
|
|
229
|
-
'data-canvas-previewable': linkProps['data-canvas-previewable'],
|
|
230
|
-
'data-course-type': linkProps['data-course-type'],
|
|
231
|
-
'data-published': linkProps['data-published']
|
|
232
|
-
};
|
|
233
|
-
|
|
234
|
-
if (linkAttrs.target === '_blank') {
|
|
235
|
-
linkAttrs.rel = 'noopener noreferrer';
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
if (anchorElm && !editor.selection.isCollapsed()) {
|
|
239
|
-
updateLink(editor, anchorElm, linkText, linkAttrs);
|
|
240
|
-
} else if (selectedContent) {
|
|
241
|
-
if (linkProps.userText && selectedPlainText !== linkText) {
|
|
242
|
-
createLink(editor, selectedElm, linkText, linkAttrs, canvasOrigin);
|
|
243
|
-
} else {
|
|
244
|
-
createLink(editor, selectedElm, undefined, linkAttrs, canvasOrigin);
|
|
245
|
-
}
|
|
246
|
-
} else {
|
|
247
|
-
createLink(editor, selectedElm, linkText, linkAttrs, canvasOrigin);
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
return editor.selection.getEnd(); // this will be the newly created or updated content
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
function getAnchorText(selection, anchorElm) {
|
|
254
|
-
return anchorElm ? anchorElm.innerText : selection.getContent({
|
|
255
|
-
format: 'text'
|
|
256
|
-
});
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
function updateLink(editor, anchorElm, text, linkAttrs) {
|
|
260
|
-
if (text && anchorElm.innerText !== text) {
|
|
261
|
-
anchorElm.innerText = text;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
editor.dom.setAttribs(anchorElm, linkAttrs);
|
|
265
|
-
editor.selection.select(anchorElm);
|
|
266
|
-
editor.undoManager.add();
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
function createLink(editor, selectedElm, text, linkAttrs, canvasOrigin) {
|
|
270
|
-
if (isImageFigure(selectedElm)) {
|
|
271
|
-
linkImageFigure(editor, selectedElm, linkAttrs, canvasOrigin);
|
|
272
|
-
} else if (text) {
|
|
273
|
-
// create the whole wazoo
|
|
274
|
-
insertContent(editor, renderLink(linkAttrs, text, canvasOrigin));
|
|
275
|
-
} else {
|
|
276
|
-
// create a link on the selected content
|
|
277
|
-
editor.execCommand('mceInsertLink', false, linkAttrs);
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
function linkImageFigure(editor, fig, attrs, canvasOrigin) {
|
|
282
|
-
const img = fig.tagName === 'IMG' ? fig : editor.dom.select('img', fig)[0];
|
|
283
|
-
|
|
284
|
-
if (img) {
|
|
285
|
-
const a = renderLink(attrs, img, canvasOrigin);
|
|
286
|
-
img.parentNode.insertBefore(a, img);
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
/* ** video insertion ** */
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
export function insertVideo(editor, video, canvasOrigin) {
|
|
293
|
-
return insertMedia(editor, video, renderVideo, canvasOrigin);
|
|
294
|
-
}
|
|
295
|
-
export function insertAudio(editor, audio, canvasOrigin) {
|
|
296
|
-
return insertMedia(editor, audio, renderAudio, canvasOrigin);
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
function insertMedia(editor, media, renderMedia, canvasOrigin) {
|
|
300
|
-
const src = mediaPlayerURLFromFile(media, canvasOrigin);
|
|
301
|
-
|
|
302
|
-
if (editor.selection.isCollapsed()) {
|
|
303
|
-
var _result;
|
|
304
|
-
|
|
305
|
-
let result = insertContent(editor, renderMedia(media, canvasOrigin)); // for some reason, editor.selection.getEnd() returned from
|
|
306
|
-
// insertContent is parent paragraph when inserting the
|
|
307
|
-
// media iframe. Look for the iframe with the right
|
|
308
|
-
// src attribute. (Aside: tinymce strips the id or data-*
|
|
309
|
-
// attributes from the iframe, that's why we can't look for those)
|
|
310
|
-
|
|
311
|
-
result = result.querySelector(`iframe[src="${src}"]`); // When the iframe is inserted, it doesn't allow the media to play
|
|
312
|
-
// because the wrapping span captures the click events. Setting
|
|
313
|
-
// contentEditable to false disables this behavior.
|
|
314
|
-
|
|
315
|
-
if ((_result = result) !== null && _result !== void 0 && _result.parentElement) {
|
|
316
|
-
editor.dom.setAttrib(result.parentElement, 'contenteditable', false);
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
return result;
|
|
320
|
-
} else {
|
|
321
|
-
return insertLink(editor, { ...media,
|
|
322
|
-
href: src
|
|
323
|
-
}, canvasOrigin);
|
|
324
|
-
}
|
|
325
|
-
}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (C) 2018 - present Instructure, Inc.
|
|
3
|
-
*
|
|
4
|
-
* This file is part of Canvas.
|
|
5
|
-
*
|
|
6
|
-
* Canvas is free software: you can redistribute it and/or modify it under
|
|
7
|
-
* the terms of the GNU Affero General Public License as published by the Free
|
|
8
|
-
* Software Foundation, version 3 of the License.
|
|
9
|
-
*
|
|
10
|
-
* Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
11
|
-
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
12
|
-
* A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
13
|
-
* details.
|
|
14
|
-
*
|
|
15
|
-
* You should have received a copy of the GNU Affero General Public License along
|
|
16
|
-
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* functions in this module SHOULD NOT have side effects,
|
|
21
|
-
* but should be focused around providing necessary data
|
|
22
|
-
* or dom transformations with no state in this file.
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* transforms an input url to make a link out of
|
|
27
|
-
* into a correctly formed url. If it's clearly a mailing link,
|
|
28
|
-
* adds mailto: to the front, and if it has no protocol but isn't an
|
|
29
|
-
* absolute path, it prepends "http://".
|
|
30
|
-
*
|
|
31
|
-
* @param {string} input the raw url representative input by a user
|
|
32
|
-
*
|
|
33
|
-
* @returns {string} a well formed url
|
|
34
|
-
*/
|
|
35
|
-
export function cleanUrl(input) {
|
|
36
|
-
let url = input;
|
|
37
|
-
|
|
38
|
-
if (input) {
|
|
39
|
-
if (input.match(/@/) && !input.match(/\//) && !input.match(/^mailto:/)) {
|
|
40
|
-
url = 'mailto:' + input;
|
|
41
|
-
} else if (!input.match(/^\w+:\/\//) && !input.match(/^(?:mailto|skype|tel):/) && !input.match(/^\//)) {
|
|
42
|
-
url = 'http://' + input;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
if (url.indexOf('@') != -1 && url.indexOf('mailto:') != 0 && !url.match(/^http/)) {
|
|
46
|
-
url = 'mailto:' + url;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
return url;
|
|
51
|
-
} // given the current selection, find the containing anchor
|
|
52
|
-
|
|
53
|
-
export function getAnchorElement(editor, selectedElm) {
|
|
54
|
-
selectedElm = selectedElm || editor.selection.getNode();
|
|
55
|
-
|
|
56
|
-
if (isImageFigure(selectedElm)) {
|
|
57
|
-
return editor.dom.select('a[href]', selectedElm)[0];
|
|
58
|
-
} else {
|
|
59
|
-
return editor.dom.getParent(selectedElm, 'a[href]');
|
|
60
|
-
}
|
|
61
|
-
} // is the selection only text, or are other elements selected
|
|
62
|
-
|
|
63
|
-
const d = document.createElement('div');
|
|
64
|
-
export function isOnlyTextSelected(html) {
|
|
65
|
-
// this regex-based code is lifted from tinymce's link plugin, but I didn't like it.
|
|
66
|
-
// if (/</.test(html) && (!/^<a [^>]+>[^<]+<\/a>$/.test(html) || html.indexOf('href=') === -1)) {
|
|
67
|
-
// return false
|
|
68
|
-
// }
|
|
69
|
-
// return true
|
|
70
|
-
d.innerHTML = html;
|
|
71
|
-
return !d.querySelector('img,iframe,video,audio');
|
|
72
|
-
}
|
|
73
|
-
export function isOKToLink(html) {
|
|
74
|
-
// I know, parsing html with regexp is dangerous, but this is called way too often
|
|
75
|
-
// from the instructure_link/plugin.ts to create the nodes for a better check
|
|
76
|
-
if (/(?:<(iframe|audio|video)|data-placeholder-for)/.test(html)) {
|
|
77
|
-
return false;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
return true;
|
|
81
|
-
}
|
|
82
|
-
export function isImageFigure(elm) {
|
|
83
|
-
return elm && elm.nodeName === 'FIGURE' && /\bimage\b/i.test(elm.className) // (elm.nodeName === 'IMG' || (elm.nodeName === 'FIGURE' && /\bimage\b/i.test(elm.className)))
|
|
84
|
-
;
|
|
85
|
-
}
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (C) 2018 - present Instructure, Inc.
|
|
3
|
-
*
|
|
4
|
-
* This file is part of Canvas.
|
|
5
|
-
*
|
|
6
|
-
* Canvas is free software: you can redistribute it and/or modify it under
|
|
7
|
-
* the terms of the GNU Affero General Public License as published by the Free
|
|
8
|
-
* Software Foundation, version 3 of the License.
|
|
9
|
-
*
|
|
10
|
-
* Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
11
|
-
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
12
|
-
* A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
13
|
-
* details.
|
|
14
|
-
*
|
|
15
|
-
* You should have received a copy of the GNU Affero General Public License along
|
|
16
|
-
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
-
*/
|
|
18
|
-
import React from 'react';
|
|
19
|
-
import { renderToStaticMarkup } from 'react-dom/server';
|
|
20
|
-
import { cleanUrl } from './contentInsertionUtils';
|
|
21
|
-
import formatMessage from '../format-message';
|
|
22
|
-
import { VIDEO_SIZE_DEFAULT, AUDIO_PLAYER_SIZE } from './plugins/instructure_record/VideoOptionsTray/TrayController';
|
|
23
|
-
import { mediaPlayerURLFromFile } from './plugins/shared/fileTypeUtils';
|
|
24
|
-
import { prepEmbedSrc, prepLinkedSrc, absoluteToRelativeUrl } from '../common/fileUrl';
|
|
25
|
-
export function renderLink(data, contents, canvasOrigin) {
|
|
26
|
-
const linkAttrs = { ...data
|
|
27
|
-
};
|
|
28
|
-
linkAttrs.href = prepLinkedSrc(linkAttrs.href || linkAttrs.url);
|
|
29
|
-
delete linkAttrs.url;
|
|
30
|
-
|
|
31
|
-
if (linkAttrs.href) {
|
|
32
|
-
linkAttrs.href = absoluteToRelativeUrl(cleanUrl(linkAttrs.href), canvasOrigin);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
linkAttrs.title = linkAttrs.title || formatMessage('Link');
|
|
36
|
-
const children = contents || linkAttrs.text || linkAttrs.title;
|
|
37
|
-
delete linkAttrs.selectionDetails;
|
|
38
|
-
delete linkAttrs.text;
|
|
39
|
-
linkAttrs.className = linkAttrs.class;
|
|
40
|
-
delete linkAttrs.class; // renderToStaticMarkup isn't happy with bool attributes
|
|
41
|
-
|
|
42
|
-
Object.keys(linkAttrs).forEach(attr => {
|
|
43
|
-
if (typeof linkAttrs[attr] === 'boolean') linkAttrs[attr] = linkAttrs[attr].toString();
|
|
44
|
-
});
|
|
45
|
-
return renderToStaticMarkup( /*#__PURE__*/React.createElement("a", linkAttrs, children));
|
|
46
|
-
}
|
|
47
|
-
export function renderLinkedImage(linkElem, image, canvasOrigin) {
|
|
48
|
-
const linkHref = linkElem.getAttribute('href');
|
|
49
|
-
image.href = prepEmbedSrc(image.href, canvasOrigin);
|
|
50
|
-
return renderToStaticMarkup( /*#__PURE__*/React.createElement("a", {
|
|
51
|
-
href: absoluteToRelativeUrl(linkHref, canvasOrigin),
|
|
52
|
-
"data-mce-href": linkHref
|
|
53
|
-
}, constructJSXImageElement(image, canvasOrigin, {
|
|
54
|
-
doNotLink: true
|
|
55
|
-
})));
|
|
56
|
-
}
|
|
57
|
-
export function constructJSXImageElement(image, canvasOrigin) {
|
|
58
|
-
let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
59
|
-
const {
|
|
60
|
-
href,
|
|
61
|
-
url,
|
|
62
|
-
src,
|
|
63
|
-
title,
|
|
64
|
-
display_name,
|
|
65
|
-
alt_text,
|
|
66
|
-
isDecorativeImage,
|
|
67
|
-
link,
|
|
68
|
-
...otherAttributes
|
|
69
|
-
} = image;
|
|
70
|
-
const imageSrc = absoluteToRelativeUrl(href || url || src, canvasOrigin);
|
|
71
|
-
let altText = alt_text || title || display_name || '';
|
|
72
|
-
|
|
73
|
-
if (isDecorativeImage) {
|
|
74
|
-
altText = '';
|
|
75
|
-
otherAttributes.role = 'presentation';
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
delete otherAttributes.contextType; // react doesn't like these
|
|
79
|
-
|
|
80
|
-
delete otherAttributes.contextId;
|
|
81
|
-
const ret = /*#__PURE__*/React.createElement("img", Object.assign({
|
|
82
|
-
alt: altText,
|
|
83
|
-
src: imageSrc,
|
|
84
|
-
width: image.width,
|
|
85
|
-
height: image.height
|
|
86
|
-
}, otherAttributes));
|
|
87
|
-
|
|
88
|
-
if (link && !opts.doNotLink) {
|
|
89
|
-
return /*#__PURE__*/React.createElement("a", {
|
|
90
|
-
href: absoluteToRelativeUrl(link, canvasOrigin),
|
|
91
|
-
target: "_blank",
|
|
92
|
-
rel: "noopener noreferrer"
|
|
93
|
-
}, ret);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
return ret;
|
|
97
|
-
}
|
|
98
|
-
export function renderImage(image, canvasOrigin, opts) {
|
|
99
|
-
image.href = prepEmbedSrc(image.href, canvasOrigin);
|
|
100
|
-
return renderToStaticMarkup(constructJSXImageElement(image, canvasOrigin, opts));
|
|
101
|
-
}
|
|
102
|
-
export function renderVideo(video, canvasOrigin) {
|
|
103
|
-
const src = mediaPlayerURLFromFile(video, canvasOrigin);
|
|
104
|
-
return `
|
|
105
|
-
<iframe
|
|
106
|
-
allow="fullscreen"
|
|
107
|
-
allowfullscreen
|
|
108
|
-
data-media-id="${getMediaId(video)}"
|
|
109
|
-
data-media-type="video"
|
|
110
|
-
src="${src}"
|
|
111
|
-
style="width:${VIDEO_SIZE_DEFAULT.width};height:${VIDEO_SIZE_DEFAULT.height};display:inline-block;"
|
|
112
|
-
title="${formatMessage('Video player for {title}', {
|
|
113
|
-
title: video.title || video.name || video.text
|
|
114
|
-
})}"></iframe>
|
|
115
|
-
`.trim().replace(/\s+/g, ' ');
|
|
116
|
-
}
|
|
117
|
-
export function renderAudio(audio, canvasOrigin) {
|
|
118
|
-
const src = mediaPlayerURLFromFile(audio, canvasOrigin);
|
|
119
|
-
return `
|
|
120
|
-
<iframe
|
|
121
|
-
data-media-id="${getMediaId(audio)}"
|
|
122
|
-
data-media-type="audio"
|
|
123
|
-
src="${src}"
|
|
124
|
-
style="width:${AUDIO_PLAYER_SIZE.width};height:${AUDIO_PLAYER_SIZE.height};display:inline-block;"
|
|
125
|
-
title="${formatMessage('Audio player for {title}', {
|
|
126
|
-
title: audio.title || audio.name || audio.text
|
|
127
|
-
})}"></iframe>
|
|
128
|
-
`.trim().replace(/\s+/g, ' ');
|
|
129
|
-
}
|
|
130
|
-
export function getMediaId(media) {
|
|
131
|
-
if (!media) return;
|
|
132
|
-
return media.media_id || media.media_entry_id || media.id || media.file_id;
|
|
133
|
-
}
|
|
134
|
-
export function updateImage(editor, img, attrs) {
|
|
135
|
-
var _editor$rceWrapper;
|
|
136
|
-
|
|
137
|
-
// Workaround: When passing empty string to editor.dom.setAttribs it removes the attribute
|
|
138
|
-
img.setAttribute('alt', attrs.altText);
|
|
139
|
-
editor.dom.setAttribs(img, {
|
|
140
|
-
src: absoluteToRelativeUrl(attrs.url, (_editor$rceWrapper = editor.rceWrapper) === null || _editor$rceWrapper === void 0 ? void 0 : _editor$rceWrapper.getCanvasUrl()),
|
|
141
|
-
role: attrs.isDecorativeImage ? 'presentation' : null,
|
|
142
|
-
width: attrs.appliedWidth,
|
|
143
|
-
height: attrs.appliedHeight
|
|
144
|
-
});
|
|
145
|
-
}
|
package/lib/rce/customEvents.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (C) 2021 - present Instructure, Inc.
|
|
3
|
-
*
|
|
4
|
-
* This file is part of Canvas.
|
|
5
|
-
*
|
|
6
|
-
* Canvas is free software: you can redistribute it and/or modify it under
|
|
7
|
-
* the terms of the GNU Affero General Public License as published by the Free
|
|
8
|
-
* Software Foundation, version 3 of the License.
|
|
9
|
-
*
|
|
10
|
-
* Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
11
|
-
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
12
|
-
* A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
13
|
-
* details.
|
|
14
|
-
*
|
|
15
|
-
* You should have received a copy of the GNU Affero General Public License along
|
|
16
|
-
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
-
*/
|
|
18
|
-
export const VIEW_CHANGE = 'ViewChange'; // Emitted when the RCE view changes (example: WYSIWYG -> RAW)
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (C) 2018 - present Instructure, Inc.
|
|
3
|
-
*
|
|
4
|
-
* This file is part of Canvas.
|
|
5
|
-
*
|
|
6
|
-
* Canvas is free software: you can redistribute it and/or modify it under
|
|
7
|
-
* the terms of the GNU Affero General Public License as published by the Free
|
|
8
|
-
* Software Foundation, version 3 of the License.
|
|
9
|
-
*
|
|
10
|
-
* Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
11
|
-
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
12
|
-
* A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
13
|
-
* details.
|
|
14
|
-
*
|
|
15
|
-
* You should have received a copy of the GNU Affero General Public License along
|
|
16
|
-
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
-
*/
|
|
18
|
-
// if a locale is absent, we don't expect to receive it from canvas, but we'll
|
|
19
|
-
// treat it the same as how we explicitly use english for Maori.
|
|
20
|
-
const mapping = {
|
|
21
|
-
ar: 'ar_SA',
|
|
22
|
-
bg: 'bg_BG',
|
|
23
|
-
ca: 'ca',
|
|
24
|
-
cs: 'cs',
|
|
25
|
-
cy: 'cy',
|
|
26
|
-
da: 'da',
|
|
27
|
-
de: 'de',
|
|
28
|
-
el: 'el',
|
|
29
|
-
// returning undefined tell tinymce to use it's default (en) strings
|
|
30
|
-
en: undefined,
|
|
31
|
-
// tinymce doesn't have Australian strings, so just pretend it's en-GB
|
|
32
|
-
'en-AU': 'en_GB',
|
|
33
|
-
'en-GB': 'en_GB',
|
|
34
|
-
es: 'es',
|
|
35
|
-
'es-ES': 'es',
|
|
36
|
-
fa: 'fa_IR',
|
|
37
|
-
'fa-IR': 'fa_IR',
|
|
38
|
-
fi: 'fi',
|
|
39
|
-
fr: 'fr_FR',
|
|
40
|
-
'fr-CA': 'fr_FR',
|
|
41
|
-
he: 'he_IL',
|
|
42
|
-
ht: undefined,
|
|
43
|
-
// tiny doesn't have Haitian Creole
|
|
44
|
-
hu: 'hu_HU',
|
|
45
|
-
hy: 'hy',
|
|
46
|
-
is: undefined,
|
|
47
|
-
// tiny doesn't have Icelandic
|
|
48
|
-
it: 'it',
|
|
49
|
-
ja: 'ja',
|
|
50
|
-
ko: 'ko_KR',
|
|
51
|
-
mi: undefined,
|
|
52
|
-
ms: undefined,
|
|
53
|
-
// tiny has Malayalam but not Malay Standard, haiyaa
|
|
54
|
-
nb: 'nb_NO',
|
|
55
|
-
nl: 'nl',
|
|
56
|
-
nn: 'nb_NO',
|
|
57
|
-
// tiny doesn't have Norwegian (Nynorsk) so go to Norwegian (Bokmal)
|
|
58
|
-
pl: 'pl',
|
|
59
|
-
pt: 'pt_PT',
|
|
60
|
-
'pt-BR': 'pt_BR',
|
|
61
|
-
ro: 'ro',
|
|
62
|
-
ru: 'ru',
|
|
63
|
-
sq: undefined,
|
|
64
|
-
// tiny doesn't have Albanian
|
|
65
|
-
sr: 'sr',
|
|
66
|
-
sl: 'sl',
|
|
67
|
-
sv: 'sv_SE',
|
|
68
|
-
th: 'th',
|
|
69
|
-
tr: 'tr_TR',
|
|
70
|
-
'uk-UA': 'uk_UA',
|
|
71
|
-
uk: 'uk_UA',
|
|
72
|
-
vi: 'vi_VN',
|
|
73
|
-
zh: 'zh_CN',
|
|
74
|
-
'zh-HK': 'zh_TW',
|
|
75
|
-
'zh-Hans': 'zh_CN',
|
|
76
|
-
'zh-Hant': 'zh_TW'
|
|
77
|
-
}; // still expose it as a method for consistent usage and in case we ever have to
|
|
78
|
-
// add special casing or null interpretation in the future
|
|
79
|
-
|
|
80
|
-
function editorLanguage(locale) {
|
|
81
|
-
if (!locale) {
|
|
82
|
-
return mapping.en;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
if (locale.match('_')) {
|
|
86
|
-
locale = locale.replace('_', '-');
|
|
87
|
-
} // tinymce won't know about custom locales, use the base one for mapping
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
if (locale.match('-x-')) {
|
|
91
|
-
locale = locale.split('-x-')[0];
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
if (mapping[locale]) {
|
|
95
|
-
return mapping[locale];
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
return mapping[locale.split('-')[0]];
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
module.exports = editorLanguage;
|