monaco-editor-core 0.56.0-dev-20251125 → 0.56.0-dev-20251217
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/esm/nls.keys.json +1 -1
- package/esm/nls.messages.cs.js +2 -2
- package/esm/nls.messages.de.js +2 -2
- package/esm/nls.messages.es.js +2 -2
- package/esm/nls.messages.fr.js +2 -2
- package/esm/nls.messages.it.js +2 -2
- package/esm/nls.messages.ja.js +2 -2
- package/esm/nls.messages.js +1 -1
- package/esm/nls.messages.json +1 -1
- package/esm/nls.messages.ko.js +2 -2
- package/esm/nls.messages.pl.js +2 -2
- package/esm/nls.messages.pt-br.js +2 -2
- package/esm/nls.messages.ru.js +2 -2
- package/esm/nls.messages.tr.js +2 -2
- package/esm/nls.messages.zh-cn.js +2 -2
- package/esm/nls.messages.zh-tw.js +2 -2
- package/esm/nls.metadata.json +30 -4
- package/esm/vs/base/browser/dom.js +1 -4
- package/esm/vs/base/browser/dom.js.map +1 -1
- package/esm/vs/base/browser/markdownRenderer.js +25 -11
- package/esm/vs/base/browser/markdownRenderer.js.map +1 -1
- package/esm/vs/base/browser/ui/button/button.js +15 -8
- package/esm/vs/base/browser/ui/button/button.js.map +1 -1
- package/esm/vs/base/browser/ui/codicons/codicon/codicon-modifiers.css +3 -8
- package/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
- package/esm/vs/base/browser/ui/list/list.css +1 -0
- package/esm/vs/base/browser/ui/toolbar/toolbar.js +3 -0
- package/esm/vs/base/browser/ui/toolbar/toolbar.js.map +1 -1
- package/esm/vs/base/common/codiconsLibrary.js +11 -2
- package/esm/vs/base/common/codiconsLibrary.js.map +1 -1
- package/esm/vs/base/common/defaultAccount.js +6 -0
- package/esm/vs/base/common/defaultAccount.js.map +1 -0
- package/esm/vs/base/common/equals.js +73 -24
- package/esm/vs/base/common/equals.js.map +1 -1
- package/esm/vs/base/common/event.js +14 -4
- package/esm/vs/base/common/event.js.map +1 -1
- package/esm/vs/base/common/iterator.js.map +1 -1
- package/esm/vs/base/common/keybindings.js +0 -8
- package/esm/vs/base/common/keybindings.js.map +1 -1
- package/esm/vs/base/common/lifecycle.js +2 -2
- package/esm/vs/base/common/lifecycle.js.map +1 -1
- package/esm/vs/base/common/marshallingIds.js.map +1 -1
- package/esm/vs/base/common/observableInternal/index.js +1 -1
- package/esm/vs/base/common/observableInternal/index.js.map +1 -1
- package/esm/vs/base/common/observableInternal/observables/observableFromEvent.js +1 -1
- package/esm/vs/base/common/observableInternal/observables/observableFromEvent.js.map +1 -1
- package/esm/vs/base/common/observableInternal/reactions/autorunImpl.js +16 -0
- package/esm/vs/base/common/observableInternal/reactions/autorunImpl.js.map +1 -1
- package/esm/vs/base/common/observableInternal/utils/utils.js +11 -0
- package/esm/vs/base/common/observableInternal/utils/utils.js.map +1 -1
- package/esm/vs/base/common/product.js.map +1 -1
- package/esm/vs/base/common/strings.js +3 -1
- package/esm/vs/base/common/strings.js.map +1 -1
- package/esm/vs/editor/browser/controller/dragScrolling.js +2 -1
- package/esm/vs/editor/browser/controller/dragScrolling.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/clipboardUtils.js +73 -2
- package/esm/vs/editor/browser/controller/editContext/clipboardUtils.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js +7 -51
- package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/screenReaderUtils.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js +7 -20
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextInput.js +14 -44
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextInput.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextRegistry.js +19 -0
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextRegistry.js.map +1 -0
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextState.js +14 -1
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextState.js.map +1 -1
- package/esm/vs/editor/browser/controller/mouseHandler.js +5 -2
- package/esm/vs/editor/browser/controller/mouseHandler.js.map +1 -1
- package/esm/vs/editor/browser/editorBrowser.js.map +1 -1
- package/esm/vs/editor/browser/observableCodeEditor.js +32 -15
- package/esm/vs/editor/browser/observableCodeEditor.js.map +1 -1
- package/esm/vs/editor/browser/view.js +11 -2
- package/esm/vs/editor/browser/view.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js +5 -2
- package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js.map +1 -1
- package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +10 -0
- package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js.map +1 -1
- package/esm/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.js.map +1 -1
- package/esm/vs/editor/browser/widget/multiDiffEditor/style.css +48 -0
- package/esm/vs/editor/common/config/fontInfo.js +1 -1
- package/esm/vs/editor/common/config/fontInfo.js.map +1 -1
- package/esm/vs/editor/common/core/edits/edit.js +19 -0
- package/esm/vs/editor/common/core/edits/edit.js.map +1 -1
- package/esm/vs/editor/common/core/edits/stringEdit.js +13 -0
- package/esm/vs/editor/common/core/edits/stringEdit.js.map +1 -1
- package/esm/vs/editor/common/core/edits/textEdit.js +0 -3
- package/esm/vs/editor/common/core/edits/textEdit.js.map +1 -1
- package/esm/vs/editor/common/core/text/positionToOffsetImpl.js +24 -10
- package/esm/vs/editor/common/core/text/positionToOffsetImpl.js.map +1 -1
- package/esm/vs/editor/common/cursor/cursorMoveCommands.js +4 -4
- package/esm/vs/editor/common/cursor/cursorMoveCommands.js.map +1 -1
- package/esm/vs/editor/common/cursor/cursorWordOperations.js +6 -3
- package/esm/vs/editor/common/cursor/cursorWordOperations.js.map +1 -1
- package/esm/vs/editor/common/languages/defaultDocumentColorsComputer.js +2 -2
- package/esm/vs/editor/common/languages/defaultDocumentColorsComputer.js.map +1 -1
- package/esm/vs/editor/common/languages/nullTokenize.js +1 -1
- package/esm/vs/editor/common/languages/nullTokenize.js.map +1 -1
- package/esm/vs/editor/common/languages/supports/tokenization.js +3 -0
- package/esm/vs/editor/common/languages/supports/tokenization.js.map +1 -1
- package/esm/vs/editor/common/languages.js +2 -1
- package/esm/vs/editor/common/languages.js.map +1 -1
- package/esm/vs/editor/common/model/decorationProvider.js +21 -1
- package/esm/vs/editor/common/model/decorationProvider.js.map +1 -1
- package/esm/vs/editor/common/model/textModel.js +49 -30
- package/esm/vs/editor/common/model/textModel.js.map +1 -1
- package/esm/vs/editor/common/model/tokens/abstractSyntaxTokenBackend.js +6 -3
- package/esm/vs/editor/common/model/tokens/abstractSyntaxTokenBackend.js.map +1 -1
- package/esm/vs/editor/common/model/tokens/annotations.js +177 -0
- package/esm/vs/editor/common/model/tokens/annotations.js.map +1 -0
- package/esm/vs/editor/common/model/tokens/tokenizationFontDecorationsProvider.js +131 -0
- package/esm/vs/editor/common/model/tokens/tokenizationFontDecorationsProvider.js.map +1 -0
- package/esm/vs/editor/common/model/tokens/tokenizationTextModelPart.js +9 -0
- package/esm/vs/editor/common/model/tokens/tokenizationTextModelPart.js.map +1 -1
- package/esm/vs/editor/common/model/tokens/tokenizerSyntaxTokenBackend.js +9 -0
- package/esm/vs/editor/common/model/tokens/tokenizerSyntaxTokenBackend.js.map +1 -1
- package/esm/vs/editor/common/textModelEditSource.js +2 -0
- package/esm/vs/editor/common/textModelEditSource.js.map +1 -1
- package/esm/vs/editor/common/textModelEvents.js.map +1 -1
- package/esm/vs/editor/common/viewLayout/lineDecorations.js.map +1 -1
- package/esm/vs/editor/common/viewLayout/viewLineRenderer.js +1 -1
- package/esm/vs/editor/common/viewLayout/viewLineRenderer.js.map +1 -1
- package/esm/vs/editor/contrib/clipboard/browser/clipboard.js +54 -36
- package/esm/vs/editor/contrib/clipboard/browser/clipboard.js.map +1 -1
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +14 -1
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js.map +1 -1
- package/esm/vs/editor/contrib/floatingMenu/browser/floatingMenu.css +1 -1
- package/esm/vs/editor/contrib/hover/browser/hover.css +1 -1
- package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js +1 -1
- package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js.map +1 -1
- package/esm/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.js +2 -2
- package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js +1 -0
- package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commandIds.js +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commandIds.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js +33 -4
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js +13 -12
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js +7 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant.js +2 -2
- package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js +5 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.js +2 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/InlineSuggestAlternativeAction.js +8 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/InlineSuggestAlternativeAction.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/editKind.js +198 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/editKind.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionIsVisible.js +40 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionIsVisible.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +128 -70
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js +59 -11
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js +152 -95
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js +113 -54
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js +317 -75
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/telemetry.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/utils.js +20 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/utils.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js +59 -42
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js +29 -8
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +78 -46
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditWithChanges.js +9 -4
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditWithChanges.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js +11 -4
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js +81 -41
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewInterface.js +48 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewInterface.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js +18 -15
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCollapsedView.js +3 -4
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCollapsedView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCustomView.js +6 -7
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCustomView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsDeletionView.js +4 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsDeletionView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.js +4 -3
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsLineReplacementView.js +8 -8
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsLineReplacementView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsSideBySideView.js +9 -7
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsSideBySideView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.js +203 -41
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/jumpToView.js +189 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/jumpToView.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js +85 -102
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js +75 -32
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistnaceWidgetPlacement.js +121 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistnaceWidgetPlacement.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.js +2 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js +22 -20
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js +15 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/view.css +39 -6
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js +10 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js.map +1 -1
- package/esm/vs/editor/contrib/insertFinalNewLine/browser/insertFinalNewLine.js +1 -1
- package/esm/vs/editor/contrib/lineSelection/browser/lineSelection.js +1 -1
- package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js +32 -32
- package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js.map +1 -1
- package/esm/vs/editor/contrib/linkedEditing/browser/linkedEditing.js +2 -2
- package/esm/vs/editor/contrib/links/browser/links.js +10 -10
- package/esm/vs/editor/contrib/message/browser/messageController.js +1 -1
- package/esm/vs/editor/contrib/multicursor/browser/multicursor.js +22 -22
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHints.js +1 -1
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js +4 -4
- package/esm/vs/editor/contrib/peekView/browser/peekView.js +18 -18
- package/esm/vs/editor/contrib/placeholderText/browser/placeholderText.contribution.js +1 -1
- package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js +11 -11
- package/esm/vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess.js +32 -32
- package/esm/vs/editor/contrib/readOnlyMessage/browser/contribution.js +2 -2
- package/esm/vs/editor/contrib/rename/browser/rename.js +19 -15
- package/esm/vs/editor/contrib/rename/browser/rename.js.map +1 -1
- package/esm/vs/editor/contrib/rename/browser/renameWidget.js +7 -7
- package/esm/vs/editor/contrib/sectionHeaders/browser/sectionHeaders.js +3 -2
- package/esm/vs/editor/contrib/sectionHeaders/browser/sectionHeaders.js.map +1 -1
- package/esm/vs/editor/contrib/smartSelect/browser/smartSelect.js +4 -4
- package/esm/vs/editor/contrib/snippet/browser/snippetController2.js +4 -4
- package/esm/vs/editor/contrib/snippet/browser/snippetParser.js +33 -0
- package/esm/vs/editor/contrib/snippet/browser/snippetParser.js.map +1 -1
- package/esm/vs/editor/contrib/snippet/browser/snippetVariables.js +4 -4
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.js +11 -11
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollController.js +12 -4
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollController.js.map +1 -1
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js +1 -0
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggest.js +9 -8
- package/esm/vs/editor/contrib/suggest/browser/suggest.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggestController.js +39 -28
- package/esm/vs/editor/contrib/suggest/browser/suggestController.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggestInlineCompletions.js +1 -0
- package/esm/vs/editor/contrib/suggest/browser/suggestInlineCompletions.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js +22 -18
- package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js +28 -6
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.js +2 -2
- package/esm/vs/editor/contrib/suggest/browser/wordContextKey.js +1 -1
- package/esm/vs/editor/contrib/symbolIcons/browser/symbolIcons.js +33 -33
- package/esm/vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode.js +4 -4
- package/esm/vs/editor/contrib/tokenization/browser/tokenization.js +1 -1
- package/esm/vs/editor/contrib/unicodeHighlighter/browser/bannerController.js +1 -1
- package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js +24 -24
- package/esm/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.js +5 -5
- package/esm/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.js +9 -9
- package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js +3 -3
- package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js +19 -2
- package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js.map +1 -1
- package/esm/vs/editor/editor.api.d.ts +34 -3
- package/esm/vs/editor/standalone/browser/standaloneLanguages.js +2 -2
- package/esm/vs/editor/standalone/browser/standaloneLanguages.js.map +1 -1
- package/esm/vs/editor/standalone/browser/standaloneServices.js +11 -1
- package/esm/vs/editor/standalone/browser/standaloneServices.js.map +1 -1
- package/esm/vs/editor/standalone/common/monarch/monarchLexer.js +1 -1
- package/esm/vs/editor/standalone/common/monarch/monarchLexer.js.map +1 -1
- package/esm/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js +62 -62
- package/esm/vs/platform/action/common/actionCommonCategories.js +6 -6
- package/esm/vs/platform/actionWidget/browser/actionList.js +4 -4
- package/esm/vs/platform/actionWidget/browser/actionWidget.css +11 -8
- package/esm/vs/platform/actionWidget/browser/actionWidget.js +7 -7
- package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js +5 -5
- package/esm/vs/platform/actions/browser/toolbar.js +2 -2
- package/esm/vs/platform/actions/common/actions.js +11 -5
- package/esm/vs/platform/actions/common/actions.js.map +1 -1
- package/esm/vs/platform/actions/common/menuService.js +2 -2
- package/esm/vs/platform/configuration/common/configurationRegistry.js +10 -10
- package/esm/vs/platform/contextkey/browser/contextKeyService.js +1 -1
- package/esm/vs/platform/contextkey/common/contextkey.js +9 -9
- package/esm/vs/platform/contextkey/common/contextkeys.js +9 -9
- package/esm/vs/platform/contextkey/common/scanner.js +5 -5
- package/esm/vs/platform/{product/common/productService.js → defaultAccount/common/defaultAccount.js} +2 -2
- package/esm/vs/platform/defaultAccount/common/defaultAccount.js.map +1 -0
- package/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +1 -1
- package/esm/vs/platform/hover/browser/hoverWidget.js +1 -1
- package/esm/vs/platform/hover/browser/updatableHoverWidget.js +1 -1
- package/esm/vs/platform/instantiation/common/instantiation.js.map +1 -1
- package/esm/vs/platform/instantiation/common/instantiationService.js +1 -8
- package/esm/vs/platform/instantiation/common/instantiationService.js.map +1 -1
- package/esm/vs/platform/keybinding/common/abstractKeybindingService.js +4 -4
- package/esm/vs/platform/list/browser/listService.js +27 -27
- package/esm/vs/platform/log/common/log.js +1 -1
- package/esm/vs/platform/log/common/log.js.map +1 -1
- package/esm/vs/platform/markers/common/markerService.js +6 -6
- package/esm/vs/platform/markers/common/markerService.js.map +1 -1
- package/esm/vs/platform/markers/common/markers.js +6 -6
- package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +8 -8
- package/esm/vs/platform/quickinput/browser/helpQuickAccess.js +1 -1
- package/esm/vs/platform/quickinput/browser/media/quickInput.css +7 -3
- package/esm/vs/platform/quickinput/browser/quickInput.js +19 -11
- package/esm/vs/platform/quickinput/browser/quickInput.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/quickInputActions.js +5 -5
- package/esm/vs/platform/quickinput/browser/quickInputController.js +6 -6
- package/esm/vs/platform/quickinput/browser/quickInputList.js +1 -1
- package/esm/vs/platform/quickinput/browser/quickInputUtils.js +1 -1
- package/esm/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js +1 -1
- package/esm/vs/platform/theme/common/colorUtils.js +2 -2
- package/esm/vs/platform/theme/common/colors/baseColors.js +18 -17
- package/esm/vs/platform/theme/common/colors/baseColors.js.map +1 -1
- package/esm/vs/platform/theme/common/colors/chartsColors.js +8 -8
- package/esm/vs/platform/theme/common/colors/editorColors.js +95 -95
- package/esm/vs/platform/theme/common/colors/inputColors.js +47 -47
- package/esm/vs/platform/theme/common/colors/listColors.js +36 -36
- package/esm/vs/platform/theme/common/colors/menuColors.js +7 -7
- package/esm/vs/platform/theme/common/colors/minimapColors.js +13 -13
- package/esm/vs/platform/theme/common/colors/minimapColors.js.map +1 -1
- package/esm/vs/platform/theme/common/colors/miscColors.js +16 -16
- package/esm/vs/platform/theme/common/colors/quickpickColors.js +9 -9
- package/esm/vs/platform/theme/common/colors/searchColors.js +3 -3
- package/esm/vs/platform/theme/common/iconRegistry.js +6 -6
- package/esm/vs/platform/undoRedo/common/undoRedoService.js +21 -21
- package/esm/vs/platform/undoRedo/common/undoRedoService.js.map +1 -1
- package/esm/vs/platform/window/common/window.js +1 -1
- package/esm/vs/platform/window/common/window.js.map +1 -1
- package/esm/vs/platform/workspace/common/workspace.js +1 -1
- package/monaco.d.ts +34 -3
- package/package.json +2 -2
- package/version.txt +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.js +0 -16
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.js.map +0 -1
- package/esm/vs/platform/product/common/productService.js.map +0 -1
|
@@ -96,6 +96,7 @@ export class TopBottomDragScrollingOperation extends DragScrollingOperation {
|
|
|
96
96
|
this._viewHelper.renderNow();
|
|
97
97
|
const viewportData = this._context.viewLayout.getLinesViewportData();
|
|
98
98
|
const edgeLineNumber = (this._position.outsidePosition === 'above' ? viewportData.startLineNumber : viewportData.endLineNumber);
|
|
99
|
+
const cannotScrollAnymore = (this._position.outsidePosition === 'above' ? viewportData.startLineNumber === 1 : viewportData.endLineNumber === this._context.viewModel.getLineCount());
|
|
99
100
|
// First, try to find a position that matches the horizontal position of the mouse
|
|
100
101
|
let mouseTarget;
|
|
101
102
|
{
|
|
@@ -105,7 +106,7 @@ export class TopBottomDragScrollingOperation extends DragScrollingOperation {
|
|
|
105
106
|
const relativePos = createCoordinatesRelativeToEditor(this._viewHelper.viewDomNode, editorPos, pos);
|
|
106
107
|
mouseTarget = this._mouseTargetFactory.createMouseTarget(this._viewHelper.getLastRenderData(), editorPos, pos, relativePos, null);
|
|
107
108
|
}
|
|
108
|
-
if (!mouseTarget.position || mouseTarget.position.lineNumber !== edgeLineNumber) {
|
|
109
|
+
if (!mouseTarget.position || mouseTarget.position.lineNumber !== edgeLineNumber || cannotScrollAnymore) {
|
|
109
110
|
if (this._position.outsidePosition === 'above') {
|
|
110
111
|
mouseTarget = MouseTarget.createOutsideEditor(this._position.mouseColumn, new Position(edgeLineNumber, 1), 'above', this._position.outsideDistance);
|
|
111
112
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/browser/controller/dragScrolling.ts","vs/editor/browser/controller/dragScrolling.ts"],"names":[],"mappings":"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","file":"dragScrolling.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../../../base/browser/dom.js';\nimport { Disposable, IDisposable } from '../../../base/common/lifecycle.js';\nimport { EditorOption } from '../../common/config/editorOptions.js';\nimport { Position } from '../../common/core/position.js';\nimport { ViewContext } from '../../common/viewModel/viewContext.js';\nimport { NavigationCommandRevealType } from '../coreCommands.js';\nimport { IMouseTarget, IMouseTargetOutsideEditor } from '../editorBrowser.js';\nimport { createCoordinatesRelativeToEditor, createEditorPagePosition, EditorMouseEvent, PageCoordinates } from '../editorDom.js';\nimport { IPointerHandlerHelper } from './mouseHandler.js';\nimport { MouseTarget, MouseTargetFactory } from './mouseTarget.js';\n\nexport abstract class DragScrolling extends Disposable {\n\n\tprivate _operation: DragScrollingOperation | null;\n\n\tconstructor(\n\t\tprotected readonly _context: ViewContext,\n\t\tprotected readonly _viewHelper: IPointerHandlerHelper,\n\t\tprotected readonly _mouseTargetFactory: MouseTargetFactory,\n\t\tprotected readonly _dispatchMouse: (position: IMouseTarget, inSelectionMode: boolean, revealType: NavigationCommandRevealType) => void\n\t) {\n\t\tsuper();\n\t\tthis._operation = null;\n\t}\n\n\tpublic override dispose(): void {\n\t\tsuper.dispose();\n\t\tthis.stop();\n\t}\n\n\tpublic start(position: IMouseTargetOutsideEditor, mouseEvent: EditorMouseEvent): void {\n\t\tif (this._operation) {\n\t\t\tthis._operation.setPosition(position, mouseEvent);\n\t\t} else {\n\t\t\tthis._operation = this._createDragScrollingOperation(position, mouseEvent);\n\t\t}\n\t}\n\n\tpublic stop(): void {\n\t\tif (this._operation) {\n\t\t\tthis._operation.dispose();\n\t\t\tthis._operation = null;\n\t\t}\n\t}\n\n\tprotected abstract _createDragScrollingOperation(position: IMouseTargetOutsideEditor, mouseEvent: EditorMouseEvent): DragScrollingOperation;\n}\n\nexport abstract class DragScrollingOperation extends Disposable {\n\n\tprotected _position: IMouseTargetOutsideEditor;\n\tprotected _mouseEvent: EditorMouseEvent;\n\tprivate _lastTime: number;\n\tprotected _animationFrameDisposable: IDisposable;\n\n\tconstructor(\n\t\tprotected readonly _context: ViewContext,\n\t\tprotected readonly _viewHelper: IPointerHandlerHelper,\n\t\tprotected readonly _mouseTargetFactory: MouseTargetFactory,\n\t\tprotected readonly _dispatchMouse: (position: IMouseTarget, inSelectionMode: boolean, revealType: NavigationCommandRevealType) => void,\n\t\tposition: IMouseTargetOutsideEditor,\n\t\tmouseEvent: EditorMouseEvent\n\t) {\n\t\tsuper();\n\t\tthis._position = position;\n\t\tthis._mouseEvent = mouseEvent;\n\t\tthis._lastTime = Date.now();\n\t\tthis._animationFrameDisposable = dom.scheduleAtNextAnimationFrame(dom.getWindow(mouseEvent.browserEvent), () => this._execute());\n\t}\n\n\tpublic override dispose(): void {\n\t\tthis._animationFrameDisposable.dispose();\n\t\tsuper.dispose();\n\t}\n\n\tpublic setPosition(position: IMouseTargetOutsideEditor, mouseEvent: EditorMouseEvent): void {\n\t\tthis._position = position;\n\t\tthis._mouseEvent = mouseEvent;\n\t}\n\n\t/**\n\t * update internal state and return elapsed ms since last time\n\t */\n\tprotected _tick(): number {\n\t\tconst now = Date.now();\n\t\tconst elapsed = now - this._lastTime;\n\t\tthis._lastTime = now;\n\t\treturn elapsed;\n\t}\n\n\tprotected abstract _execute(): void;\n\n}\n\nexport class TopBottomDragScrolling extends DragScrolling {\n\tprotected _createDragScrollingOperation(position: IMouseTargetOutsideEditor, mouseEvent: EditorMouseEvent): DragScrollingOperation {\n\t\treturn new TopBottomDragScrollingOperation(this._context, this._viewHelper, this._mouseTargetFactory, this._dispatchMouse, position, mouseEvent);\n\t}\n}\n\nexport class TopBottomDragScrollingOperation extends DragScrollingOperation {\n\n\t/**\n\t * get the number of lines per second to auto-scroll\n\t */\n\tprivate _getScrollSpeed(): number {\n\t\tconst lineHeight = this._context.configuration.options.get(EditorOption.lineHeight);\n\t\tconst viewportInLines = this._context.configuration.options.get(EditorOption.layoutInfo).height / lineHeight;\n\t\tconst outsideDistanceInLines = this._position.outsideDistance / lineHeight;\n\n\t\tif (outsideDistanceInLines <= 1.5) {\n\t\t\treturn Math.max(30, viewportInLines * (1 + outsideDistanceInLines));\n\t\t}\n\t\tif (outsideDistanceInLines <= 3) {\n\t\t\treturn Math.max(60, viewportInLines * (2 + outsideDistanceInLines));\n\t\t}\n\t\treturn Math.max(200, viewportInLines * (7 + outsideDistanceInLines));\n\t}\n\n\tprotected _execute(): void {\n\t\tconst lineHeight = this._context.configuration.options.get(EditorOption.lineHeight);\n\t\tconst scrollSpeedInLines = this._getScrollSpeed();\n\t\tconst elapsed = this._tick();\n\t\tconst scrollInPixels = scrollSpeedInLines * (elapsed / 1000) * lineHeight;\n\t\tconst scrollValue = (this._position.outsidePosition === 'above' ? -scrollInPixels : scrollInPixels);\n\n\t\tthis._context.viewModel.viewLayout.deltaScrollNow(0, scrollValue);\n\t\tthis._viewHelper.renderNow();\n\n\t\tconst viewportData = this._context.viewLayout.getLinesViewportData();\n\t\tconst edgeLineNumber = (this._position.outsidePosition === 'above' ? viewportData.startLineNumber : viewportData.endLineNumber);\n\n\t\t// First, try to find a position that matches the horizontal position of the mouse\n\t\tlet mouseTarget: IMouseTarget;\n\t\t{\n\t\t\tconst editorPos = createEditorPagePosition(this._viewHelper.viewDomNode);\n\t\t\tconst horizontalScrollbarHeight = this._context.configuration.options.get(EditorOption.layoutInfo).horizontalScrollbarHeight;\n\t\t\tconst pos = new PageCoordinates(this._mouseEvent.pos.x, editorPos.y + editorPos.height - horizontalScrollbarHeight - 0.1);\n\t\t\tconst relativePos = createCoordinatesRelativeToEditor(this._viewHelper.viewDomNode, editorPos, pos);\n\t\t\tmouseTarget = this._mouseTargetFactory.createMouseTarget(this._viewHelper.getLastRenderData(), editorPos, pos, relativePos, null);\n\t\t}\n\t\tif (!mouseTarget.position || mouseTarget.position.lineNumber !== edgeLineNumber) {\n\t\t\tif (this._position.outsidePosition === 'above') {\n\t\t\t\tmouseTarget = MouseTarget.createOutsideEditor(this._position.mouseColumn, new Position(edgeLineNumber, 1), 'above', this._position.outsideDistance);\n\t\t\t} else {\n\t\t\t\tmouseTarget = MouseTarget.createOutsideEditor(this._position.mouseColumn, new Position(edgeLineNumber, this._context.viewModel.getLineMaxColumn(edgeLineNumber)), 'below', this._position.outsideDistance);\n\t\t\t}\n\t\t}\n\n\t\tthis._dispatchMouse(mouseTarget, true, NavigationCommandRevealType.None);\n\t\tthis._animationFrameDisposable = dom.scheduleAtNextAnimationFrame(dom.getWindow(mouseTarget.element), () => this._execute());\n\t}\n}\n\nexport class LeftRightDragScrolling extends DragScrolling {\n\tprotected _createDragScrollingOperation(position: IMouseTargetOutsideEditor, mouseEvent: EditorMouseEvent): DragScrollingOperation {\n\t\treturn new LeftRightDragScrollingOperation(this._context, this._viewHelper, this._mouseTargetFactory, this._dispatchMouse, position, mouseEvent);\n\t}\n}\n\nexport class LeftRightDragScrollingOperation extends DragScrollingOperation {\n\n\t/**\n\t * get the number of cols per second to auto-scroll\n\t */\n\tprivate _getScrollSpeed(): number {\n\t\tconst charWidth = this._context.configuration.options.get(EditorOption.fontInfo).typicalFullwidthCharacterWidth;\n\t\tconst viewportInChars = this._context.configuration.options.get(EditorOption.layoutInfo).contentWidth / charWidth;\n\t\tconst outsideDistanceInChars = this._position.outsideDistance / charWidth;\n\t\tif (outsideDistanceInChars <= 1.5) {\n\t\t\treturn Math.max(30, viewportInChars * (1 + outsideDistanceInChars));\n\t\t}\n\t\tif (outsideDistanceInChars <= 3) {\n\t\t\treturn Math.max(60, viewportInChars * (2 + outsideDistanceInChars));\n\t\t}\n\t\treturn Math.max(200, viewportInChars * (7 + outsideDistanceInChars));\n\t}\n\n\tprotected _execute(): void {\n\t\tconst charWidth = this._context.configuration.options.get(EditorOption.fontInfo).typicalFullwidthCharacterWidth;\n\t\tconst scrollSpeedInChars = this._getScrollSpeed();\n\t\tconst elapsed = this._tick();\n\t\tconst scrollInPixels = scrollSpeedInChars * (elapsed / 1000) * charWidth * 0.5;\n\t\tconst scrollValue = (this._position.outsidePosition === 'left' ? -scrollInPixels : scrollInPixels);\n\n\t\tthis._context.viewModel.viewLayout.deltaScrollNow(scrollValue, 0);\n\t\tthis._viewHelper.renderNow();\n\n\t\tif (!this._position.position) {\n\t\t\treturn;\n\t\t}\n\t\tconst edgeLineNumber = this._position.position.lineNumber;\n\n\t\t// First, try to find a position that matches the horizontal position of the mouse\n\t\tlet mouseTarget: IMouseTarget;\n\t\t{\n\t\t\tconst editorPos = createEditorPagePosition(this._viewHelper.viewDomNode);\n\t\t\tconst horizontalScrollbarHeight = this._context.configuration.options.get(EditorOption.layoutInfo).horizontalScrollbarHeight;\n\t\t\tconst pos = new PageCoordinates(this._mouseEvent.pos.x, editorPos.y + editorPos.height - horizontalScrollbarHeight - 0.1);\n\t\t\tconst relativePos = createCoordinatesRelativeToEditor(this._viewHelper.viewDomNode, editorPos, pos);\n\t\t\tmouseTarget = this._mouseTargetFactory.createMouseTarget(this._viewHelper.getLastRenderData(), editorPos, pos, relativePos, null);\n\t\t}\n\n\t\tif (this._position.outsidePosition === 'left') {\n\t\t\tmouseTarget = MouseTarget.createOutsideEditor(mouseTarget.mouseColumn, new Position(edgeLineNumber, mouseTarget.mouseColumn), 'left', this._position.outsideDistance);\n\t\t} else {\n\t\t\tmouseTarget = MouseTarget.createOutsideEditor(mouseTarget.mouseColumn, new Position(edgeLineNumber, mouseTarget.mouseColumn), 'right', this._position.outsideDistance);\n\t\t}\n\n\t\tthis._dispatchMouse(mouseTarget, true, NavigationCommandRevealType.None);\n\t\tthis._animationFrameDisposable = dom.scheduleAtNextAnimationFrame(dom.getWindow(mouseTarget.element), () => this._execute());\n\t}\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../../../base/browser/dom.js';\nimport { Disposable, IDisposable } from '../../../base/common/lifecycle.js';\nimport { EditorOption } from '../../common/config/editorOptions.js';\nimport { Position } from '../../common/core/position.js';\nimport { ViewContext } from '../../common/viewModel/viewContext.js';\nimport { NavigationCommandRevealType } from '../coreCommands.js';\nimport { IMouseTarget, IMouseTargetOutsideEditor } from '../editorBrowser.js';\nimport { createCoordinatesRelativeToEditor, createEditorPagePosition, EditorMouseEvent, PageCoordinates } from '../editorDom.js';\nimport { IPointerHandlerHelper } from './mouseHandler.js';\nimport { MouseTarget, MouseTargetFactory } from './mouseTarget.js';\n\nexport abstract class DragScrolling extends Disposable {\n\n\tprivate _operation: DragScrollingOperation | null;\n\n\tconstructor(\n\t\tprotected readonly _context: ViewContext,\n\t\tprotected readonly _viewHelper: IPointerHandlerHelper,\n\t\tprotected readonly _mouseTargetFactory: MouseTargetFactory,\n\t\tprotected readonly _dispatchMouse: (position: IMouseTarget, inSelectionMode: boolean, revealType: NavigationCommandRevealType) => void\n\t) {\n\t\tsuper();\n\t\tthis._operation = null;\n\t}\n\n\tpublic override dispose(): void {\n\t\tsuper.dispose();\n\t\tthis.stop();\n\t}\n\n\tpublic start(position: IMouseTargetOutsideEditor, mouseEvent: EditorMouseEvent): void {\n\t\tif (this._operation) {\n\t\t\tthis._operation.setPosition(position, mouseEvent);\n\t\t} else {\n\t\t\tthis._operation = this._createDragScrollingOperation(position, mouseEvent);\n\t\t}\n\t}\n\n\tpublic stop(): void {\n\t\tif (this._operation) {\n\t\t\tthis._operation.dispose();\n\t\t\tthis._operation = null;\n\t\t}\n\t}\n\n\tprotected abstract _createDragScrollingOperation(position: IMouseTargetOutsideEditor, mouseEvent: EditorMouseEvent): DragScrollingOperation;\n}\n\nexport abstract class DragScrollingOperation extends Disposable {\n\n\tprotected _position: IMouseTargetOutsideEditor;\n\tprotected _mouseEvent: EditorMouseEvent;\n\tprivate _lastTime: number;\n\tprotected _animationFrameDisposable: IDisposable;\n\n\tconstructor(\n\t\tprotected readonly _context: ViewContext,\n\t\tprotected readonly _viewHelper: IPointerHandlerHelper,\n\t\tprotected readonly _mouseTargetFactory: MouseTargetFactory,\n\t\tprotected readonly _dispatchMouse: (position: IMouseTarget, inSelectionMode: boolean, revealType: NavigationCommandRevealType) => void,\n\t\tposition: IMouseTargetOutsideEditor,\n\t\tmouseEvent: EditorMouseEvent\n\t) {\n\t\tsuper();\n\t\tthis._position = position;\n\t\tthis._mouseEvent = mouseEvent;\n\t\tthis._lastTime = Date.now();\n\t\tthis._animationFrameDisposable = dom.scheduleAtNextAnimationFrame(dom.getWindow(mouseEvent.browserEvent), () => this._execute());\n\t}\n\n\tpublic override dispose(): void {\n\t\tthis._animationFrameDisposable.dispose();\n\t\tsuper.dispose();\n\t}\n\n\tpublic setPosition(position: IMouseTargetOutsideEditor, mouseEvent: EditorMouseEvent): void {\n\t\tthis._position = position;\n\t\tthis._mouseEvent = mouseEvent;\n\t}\n\n\t/**\n\t * update internal state and return elapsed ms since last time\n\t */\n\tprotected _tick(): number {\n\t\tconst now = Date.now();\n\t\tconst elapsed = now - this._lastTime;\n\t\tthis._lastTime = now;\n\t\treturn elapsed;\n\t}\n\n\tprotected abstract _execute(): void;\n\n}\n\nexport class TopBottomDragScrolling extends DragScrolling {\n\tprotected _createDragScrollingOperation(position: IMouseTargetOutsideEditor, mouseEvent: EditorMouseEvent): DragScrollingOperation {\n\t\treturn new TopBottomDragScrollingOperation(this._context, this._viewHelper, this._mouseTargetFactory, this._dispatchMouse, position, mouseEvent);\n\t}\n}\n\nexport class TopBottomDragScrollingOperation extends DragScrollingOperation {\n\n\t/**\n\t * get the number of lines per second to auto-scroll\n\t */\n\tprivate _getScrollSpeed(): number {\n\t\tconst lineHeight = this._context.configuration.options.get(EditorOption.lineHeight);\n\t\tconst viewportInLines = this._context.configuration.options.get(EditorOption.layoutInfo).height / lineHeight;\n\t\tconst outsideDistanceInLines = this._position.outsideDistance / lineHeight;\n\n\t\tif (outsideDistanceInLines <= 1.5) {\n\t\t\treturn Math.max(30, viewportInLines * (1 + outsideDistanceInLines));\n\t\t}\n\t\tif (outsideDistanceInLines <= 3) {\n\t\t\treturn Math.max(60, viewportInLines * (2 + outsideDistanceInLines));\n\t\t}\n\t\treturn Math.max(200, viewportInLines * (7 + outsideDistanceInLines));\n\t}\n\n\tprotected _execute(): void {\n\t\tconst lineHeight = this._context.configuration.options.get(EditorOption.lineHeight);\n\t\tconst scrollSpeedInLines = this._getScrollSpeed();\n\t\tconst elapsed = this._tick();\n\t\tconst scrollInPixels = scrollSpeedInLines * (elapsed / 1000) * lineHeight;\n\t\tconst scrollValue = (this._position.outsidePosition === 'above' ? -scrollInPixels : scrollInPixels);\n\n\t\tthis._context.viewModel.viewLayout.deltaScrollNow(0, scrollValue);\n\t\tthis._viewHelper.renderNow();\n\n\t\tconst viewportData = this._context.viewLayout.getLinesViewportData();\n\t\tconst edgeLineNumber = (this._position.outsidePosition === 'above' ? viewportData.startLineNumber : viewportData.endLineNumber);\n\n\t\t// First, try to find a position that matches the horizontal position of the mouse\n\t\tlet mouseTarget: IMouseTarget;\n\t\t{\n\t\t\tconst editorPos = createEditorPagePosition(this._viewHelper.viewDomNode);\n\t\t\tconst horizontalScrollbarHeight = this._context.configuration.options.get(EditorOption.layoutInfo).horizontalScrollbarHeight;\n\t\t\tconst pos = new PageCoordinates(this._mouseEvent.pos.x, editorPos.y + editorPos.height - horizontalScrollbarHeight - 0.1);\n\t\t\tconst relativePos = createCoordinatesRelativeToEditor(this._viewHelper.viewDomNode, editorPos, pos);\n\t\t\tmouseTarget = this._mouseTargetFactory.createMouseTarget(this._viewHelper.getLastRenderData(), editorPos, pos, relativePos, null);\n\t\t}\n\t\tif (!mouseTarget.position || mouseTarget.position.lineNumber !== edgeLineNumber) {\n\t\t\tif (this._position.outsidePosition === 'above') {\n\t\t\t\tmouseTarget = MouseTarget.createOutsideEditor(this._position.mouseColumn, new Position(edgeLineNumber, 1), 'above', this._position.outsideDistance);\n\t\t\t} else {\n\t\t\t\tmouseTarget = MouseTarget.createOutsideEditor(this._position.mouseColumn, new Position(edgeLineNumber, this._context.viewModel.getLineMaxColumn(edgeLineNumber)), 'below', this._position.outsideDistance);\n\t\t\t}\n\t\t}\n\n\t\tthis._dispatchMouse(mouseTarget, true, NavigationCommandRevealType.None);\n\t\tthis._animationFrameDisposable = dom.scheduleAtNextAnimationFrame(dom.getWindow(mouseTarget.element), () => this._execute());\n\t}\n}\n\nexport class LeftRightDragScrolling extends DragScrolling {\n\tprotected _createDragScrollingOperation(position: IMouseTargetOutsideEditor, mouseEvent: EditorMouseEvent): DragScrollingOperation {\n\t\treturn new LeftRightDragScrollingOperation(this._context, this._viewHelper, this._mouseTargetFactory, this._dispatchMouse, position, mouseEvent);\n\t}\n}\n\nexport class LeftRightDragScrollingOperation extends DragScrollingOperation {\n\n\t/**\n\t * get the number of cols per second to auto-scroll\n\t */\n\tprivate _getScrollSpeed(): number {\n\t\tconst charWidth = this._context.configuration.options.get(EditorOption.fontInfo).typicalFullwidthCharacterWidth;\n\t\tconst viewportInChars = this._context.configuration.options.get(EditorOption.layoutInfo).contentWidth / charWidth;\n\t\tconst outsideDistanceInChars = this._position.outsideDistance / charWidth;\n\t\tif (outsideDistanceInChars <= 1.5) {\n\t\t\treturn Math.max(30, viewportInChars * (1 + outsideDistanceInChars));\n\t\t}\n\t\tif (outsideDistanceInChars <= 3) {\n\t\t\treturn Math.max(60, viewportInChars * (2 + outsideDistanceInChars));\n\t\t}\n\t\treturn Math.max(200, viewportInChars * (7 + outsideDistanceInChars));\n\t}\n\n\tprotected _execute(): void {\n\t\tconst charWidth = this._context.configuration.options.get(EditorOption.fontInfo).typicalFullwidthCharacterWidth;\n\t\tconst scrollSpeedInChars = this._getScrollSpeed();\n\t\tconst elapsed = this._tick();\n\t\tconst scrollInPixels = scrollSpeedInChars * (elapsed / 1000) * charWidth * 0.5;\n\t\tconst scrollValue = (this._position.outsidePosition === 'left' ? -scrollInPixels : scrollInPixels);\n\n\t\tthis._context.viewModel.viewLayout.deltaScrollNow(scrollValue, 0);\n\t\tthis._viewHelper.renderNow();\n\n\t\tif (!this._position.position) {\n\t\t\treturn;\n\t\t}\n\t\tconst edgeLineNumber = this._position.position.lineNumber;\n\n\t\t// First, try to find a position that matches the horizontal position of the mouse\n\t\tlet mouseTarget: IMouseTarget;\n\t\t{\n\t\t\tconst editorPos = createEditorPagePosition(this._viewHelper.viewDomNode);\n\t\t\tconst horizontalScrollbarHeight = this._context.configuration.options.get(EditorOption.layoutInfo).horizontalScrollbarHeight;\n\t\t\tconst pos = new PageCoordinates(this._mouseEvent.pos.x, editorPos.y + editorPos.height - horizontalScrollbarHeight - 0.1);\n\t\t\tconst relativePos = createCoordinatesRelativeToEditor(this._viewHelper.viewDomNode, editorPos, pos);\n\t\t\tmouseTarget = this._mouseTargetFactory.createMouseTarget(this._viewHelper.getLastRenderData(), editorPos, pos, relativePos, null);\n\t\t}\n\n\t\tif (this._position.outsidePosition === 'left') {\n\t\t\tmouseTarget = MouseTarget.createOutsideEditor(mouseTarget.mouseColumn, new Position(edgeLineNumber, mouseTarget.mouseColumn), 'left', this._position.outsideDistance);\n\t\t} else {\n\t\t\tmouseTarget = MouseTarget.createOutsideEditor(mouseTarget.mouseColumn, new Position(edgeLineNumber, mouseTarget.mouseColumn), 'right', this._position.outsideDistance);\n\t\t}\n\n\t\tthis._dispatchMouse(mouseTarget, true, NavigationCommandRevealType.None);\n\t\tthis._animationFrameDisposable = dom.scheduleAtNextAnimationFrame(dom.getWindow(mouseTarget.element), () => this._execute());\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/browser/controller/dragScrolling.ts","vs/editor/browser/controller/dragScrolling.ts"],"names":[],"mappings":"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","file":"dragScrolling.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../../../base/browser/dom.js';\nimport { Disposable, IDisposable } from '../../../base/common/lifecycle.js';\nimport { EditorOption } from '../../common/config/editorOptions.js';\nimport { Position } from '../../common/core/position.js';\nimport { ViewContext } from '../../common/viewModel/viewContext.js';\nimport { NavigationCommandRevealType } from '../coreCommands.js';\nimport { IMouseTarget, IMouseTargetOutsideEditor } from '../editorBrowser.js';\nimport { createCoordinatesRelativeToEditor, createEditorPagePosition, EditorMouseEvent, PageCoordinates } from '../editorDom.js';\nimport { IPointerHandlerHelper } from './mouseHandler.js';\nimport { MouseTarget, MouseTargetFactory } from './mouseTarget.js';\n\nexport abstract class DragScrolling extends Disposable {\n\n\tprivate _operation: DragScrollingOperation | null;\n\n\tconstructor(\n\t\tprotected readonly _context: ViewContext,\n\t\tprotected readonly _viewHelper: IPointerHandlerHelper,\n\t\tprotected readonly _mouseTargetFactory: MouseTargetFactory,\n\t\tprotected readonly _dispatchMouse: (position: IMouseTarget, inSelectionMode: boolean, revealType: NavigationCommandRevealType) => void\n\t) {\n\t\tsuper();\n\t\tthis._operation = null;\n\t}\n\n\tpublic override dispose(): void {\n\t\tsuper.dispose();\n\t\tthis.stop();\n\t}\n\n\tpublic start(position: IMouseTargetOutsideEditor, mouseEvent: EditorMouseEvent): void {\n\t\tif (this._operation) {\n\t\t\tthis._operation.setPosition(position, mouseEvent);\n\t\t} else {\n\t\t\tthis._operation = this._createDragScrollingOperation(position, mouseEvent);\n\t\t}\n\t}\n\n\tpublic stop(): void {\n\t\tif (this._operation) {\n\t\t\tthis._operation.dispose();\n\t\t\tthis._operation = null;\n\t\t}\n\t}\n\n\tprotected abstract _createDragScrollingOperation(position: IMouseTargetOutsideEditor, mouseEvent: EditorMouseEvent): DragScrollingOperation;\n}\n\nexport abstract class DragScrollingOperation extends Disposable {\n\n\tprotected _position: IMouseTargetOutsideEditor;\n\tprotected _mouseEvent: EditorMouseEvent;\n\tprivate _lastTime: number;\n\tprotected _animationFrameDisposable: IDisposable;\n\n\tconstructor(\n\t\tprotected readonly _context: ViewContext,\n\t\tprotected readonly _viewHelper: IPointerHandlerHelper,\n\t\tprotected readonly _mouseTargetFactory: MouseTargetFactory,\n\t\tprotected readonly _dispatchMouse: (position: IMouseTarget, inSelectionMode: boolean, revealType: NavigationCommandRevealType) => void,\n\t\tposition: IMouseTargetOutsideEditor,\n\t\tmouseEvent: EditorMouseEvent\n\t) {\n\t\tsuper();\n\t\tthis._position = position;\n\t\tthis._mouseEvent = mouseEvent;\n\t\tthis._lastTime = Date.now();\n\t\tthis._animationFrameDisposable = dom.scheduleAtNextAnimationFrame(dom.getWindow(mouseEvent.browserEvent), () => this._execute());\n\t}\n\n\tpublic override dispose(): void {\n\t\tthis._animationFrameDisposable.dispose();\n\t\tsuper.dispose();\n\t}\n\n\tpublic setPosition(position: IMouseTargetOutsideEditor, mouseEvent: EditorMouseEvent): void {\n\t\tthis._position = position;\n\t\tthis._mouseEvent = mouseEvent;\n\t}\n\n\t/**\n\t * update internal state and return elapsed ms since last time\n\t */\n\tprotected _tick(): number {\n\t\tconst now = Date.now();\n\t\tconst elapsed = now - this._lastTime;\n\t\tthis._lastTime = now;\n\t\treturn elapsed;\n\t}\n\n\tprotected abstract _execute(): void;\n\n}\n\nexport class TopBottomDragScrolling extends DragScrolling {\n\tprotected _createDragScrollingOperation(position: IMouseTargetOutsideEditor, mouseEvent: EditorMouseEvent): DragScrollingOperation {\n\t\treturn new TopBottomDragScrollingOperation(this._context, this._viewHelper, this._mouseTargetFactory, this._dispatchMouse, position, mouseEvent);\n\t}\n}\n\nexport class TopBottomDragScrollingOperation extends DragScrollingOperation {\n\n\t/**\n\t * get the number of lines per second to auto-scroll\n\t */\n\tprivate _getScrollSpeed(): number {\n\t\tconst lineHeight = this._context.configuration.options.get(EditorOption.lineHeight);\n\t\tconst viewportInLines = this._context.configuration.options.get(EditorOption.layoutInfo).height / lineHeight;\n\t\tconst outsideDistanceInLines = this._position.outsideDistance / lineHeight;\n\n\t\tif (outsideDistanceInLines <= 1.5) {\n\t\t\treturn Math.max(30, viewportInLines * (1 + outsideDistanceInLines));\n\t\t}\n\t\tif (outsideDistanceInLines <= 3) {\n\t\t\treturn Math.max(60, viewportInLines * (2 + outsideDistanceInLines));\n\t\t}\n\t\treturn Math.max(200, viewportInLines * (7 + outsideDistanceInLines));\n\t}\n\n\tprotected _execute(): void {\n\t\tconst lineHeight = this._context.configuration.options.get(EditorOption.lineHeight);\n\t\tconst scrollSpeedInLines = this._getScrollSpeed();\n\t\tconst elapsed = this._tick();\n\t\tconst scrollInPixels = scrollSpeedInLines * (elapsed / 1000) * lineHeight;\n\t\tconst scrollValue = (this._position.outsidePosition === 'above' ? -scrollInPixels : scrollInPixels);\n\n\t\tthis._context.viewModel.viewLayout.deltaScrollNow(0, scrollValue);\n\t\tthis._viewHelper.renderNow();\n\n\t\tconst viewportData = this._context.viewLayout.getLinesViewportData();\n\t\tconst edgeLineNumber = (this._position.outsidePosition === 'above' ? viewportData.startLineNumber : viewportData.endLineNumber);\n\t\tconst cannotScrollAnymore = (this._position.outsidePosition === 'above' ? viewportData.startLineNumber === 1 : viewportData.endLineNumber === this._context.viewModel.getLineCount());\n\n\t\t// First, try to find a position that matches the horizontal position of the mouse\n\t\tlet mouseTarget: IMouseTarget;\n\t\t{\n\t\t\tconst editorPos = createEditorPagePosition(this._viewHelper.viewDomNode);\n\t\t\tconst horizontalScrollbarHeight = this._context.configuration.options.get(EditorOption.layoutInfo).horizontalScrollbarHeight;\n\t\t\tconst pos = new PageCoordinates(this._mouseEvent.pos.x, editorPos.y + editorPos.height - horizontalScrollbarHeight - 0.1);\n\t\t\tconst relativePos = createCoordinatesRelativeToEditor(this._viewHelper.viewDomNode, editorPos, pos);\n\t\t\tmouseTarget = this._mouseTargetFactory.createMouseTarget(this._viewHelper.getLastRenderData(), editorPos, pos, relativePos, null);\n\t\t}\n\t\tif (!mouseTarget.position || mouseTarget.position.lineNumber !== edgeLineNumber || cannotScrollAnymore) {\n\t\t\tif (this._position.outsidePosition === 'above') {\n\t\t\t\tmouseTarget = MouseTarget.createOutsideEditor(this._position.mouseColumn, new Position(edgeLineNumber, 1), 'above', this._position.outsideDistance);\n\t\t\t} else {\n\t\t\t\tmouseTarget = MouseTarget.createOutsideEditor(this._position.mouseColumn, new Position(edgeLineNumber, this._context.viewModel.getLineMaxColumn(edgeLineNumber)), 'below', this._position.outsideDistance);\n\t\t\t}\n\t\t}\n\n\t\tthis._dispatchMouse(mouseTarget, true, NavigationCommandRevealType.None);\n\t\tthis._animationFrameDisposable = dom.scheduleAtNextAnimationFrame(dom.getWindow(mouseTarget.element), () => this._execute());\n\t}\n}\n\nexport class LeftRightDragScrolling extends DragScrolling {\n\tprotected _createDragScrollingOperation(position: IMouseTargetOutsideEditor, mouseEvent: EditorMouseEvent): DragScrollingOperation {\n\t\treturn new LeftRightDragScrollingOperation(this._context, this._viewHelper, this._mouseTargetFactory, this._dispatchMouse, position, mouseEvent);\n\t}\n}\n\nexport class LeftRightDragScrollingOperation extends DragScrollingOperation {\n\n\t/**\n\t * get the number of cols per second to auto-scroll\n\t */\n\tprivate _getScrollSpeed(): number {\n\t\tconst charWidth = this._context.configuration.options.get(EditorOption.fontInfo).typicalFullwidthCharacterWidth;\n\t\tconst viewportInChars = this._context.configuration.options.get(EditorOption.layoutInfo).contentWidth / charWidth;\n\t\tconst outsideDistanceInChars = this._position.outsideDistance / charWidth;\n\t\tif (outsideDistanceInChars <= 1.5) {\n\t\t\treturn Math.max(30, viewportInChars * (1 + outsideDistanceInChars));\n\t\t}\n\t\tif (outsideDistanceInChars <= 3) {\n\t\t\treturn Math.max(60, viewportInChars * (2 + outsideDistanceInChars));\n\t\t}\n\t\treturn Math.max(200, viewportInChars * (7 + outsideDistanceInChars));\n\t}\n\n\tprotected _execute(): void {\n\t\tconst charWidth = this._context.configuration.options.get(EditorOption.fontInfo).typicalFullwidthCharacterWidth;\n\t\tconst scrollSpeedInChars = this._getScrollSpeed();\n\t\tconst elapsed = this._tick();\n\t\tconst scrollInPixels = scrollSpeedInChars * (elapsed / 1000) * charWidth * 0.5;\n\t\tconst scrollValue = (this._position.outsidePosition === 'left' ? -scrollInPixels : scrollInPixels);\n\n\t\tthis._context.viewModel.viewLayout.deltaScrollNow(scrollValue, 0);\n\t\tthis._viewHelper.renderNow();\n\n\t\tif (!this._position.position) {\n\t\t\treturn;\n\t\t}\n\t\tconst edgeLineNumber = this._position.position.lineNumber;\n\n\t\t// First, try to find a position that matches the horizontal position of the mouse\n\t\tlet mouseTarget: IMouseTarget;\n\t\t{\n\t\t\tconst editorPos = createEditorPagePosition(this._viewHelper.viewDomNode);\n\t\t\tconst horizontalScrollbarHeight = this._context.configuration.options.get(EditorOption.layoutInfo).horizontalScrollbarHeight;\n\t\t\tconst pos = new PageCoordinates(this._mouseEvent.pos.x, editorPos.y + editorPos.height - horizontalScrollbarHeight - 0.1);\n\t\t\tconst relativePos = createCoordinatesRelativeToEditor(this._viewHelper.viewDomNode, editorPos, pos);\n\t\t\tmouseTarget = this._mouseTargetFactory.createMouseTarget(this._viewHelper.getLastRenderData(), editorPos, pos, relativePos, null);\n\t\t}\n\n\t\tif (this._position.outsidePosition === 'left') {\n\t\t\tmouseTarget = MouseTarget.createOutsideEditor(mouseTarget.mouseColumn, new Position(edgeLineNumber, mouseTarget.mouseColumn), 'left', this._position.outsideDistance);\n\t\t} else {\n\t\t\tmouseTarget = MouseTarget.createOutsideEditor(mouseTarget.mouseColumn, new Position(edgeLineNumber, mouseTarget.mouseColumn), 'right', this._position.outsideDistance);\n\t\t}\n\n\t\tthis._dispatchMouse(mouseTarget, true, NavigationCommandRevealType.None);\n\t\tthis._animationFrameDisposable = dom.scheduleAtNextAnimationFrame(dom.getWindow(mouseTarget.element), () => this._execute());\n\t}\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as dom from '../../../base/browser/dom.js';\nimport { Disposable, IDisposable } from '../../../base/common/lifecycle.js';\nimport { EditorOption } from '../../common/config/editorOptions.js';\nimport { Position } from '../../common/core/position.js';\nimport { ViewContext } from '../../common/viewModel/viewContext.js';\nimport { NavigationCommandRevealType } from '../coreCommands.js';\nimport { IMouseTarget, IMouseTargetOutsideEditor } from '../editorBrowser.js';\nimport { createCoordinatesRelativeToEditor, createEditorPagePosition, EditorMouseEvent, PageCoordinates } from '../editorDom.js';\nimport { IPointerHandlerHelper } from './mouseHandler.js';\nimport { MouseTarget, MouseTargetFactory } from './mouseTarget.js';\n\nexport abstract class DragScrolling extends Disposable {\n\n\tprivate _operation: DragScrollingOperation | null;\n\n\tconstructor(\n\t\tprotected readonly _context: ViewContext,\n\t\tprotected readonly _viewHelper: IPointerHandlerHelper,\n\t\tprotected readonly _mouseTargetFactory: MouseTargetFactory,\n\t\tprotected readonly _dispatchMouse: (position: IMouseTarget, inSelectionMode: boolean, revealType: NavigationCommandRevealType) => void\n\t) {\n\t\tsuper();\n\t\tthis._operation = null;\n\t}\n\n\tpublic override dispose(): void {\n\t\tsuper.dispose();\n\t\tthis.stop();\n\t}\n\n\tpublic start(position: IMouseTargetOutsideEditor, mouseEvent: EditorMouseEvent): void {\n\t\tif (this._operation) {\n\t\t\tthis._operation.setPosition(position, mouseEvent);\n\t\t} else {\n\t\t\tthis._operation = this._createDragScrollingOperation(position, mouseEvent);\n\t\t}\n\t}\n\n\tpublic stop(): void {\n\t\tif (this._operation) {\n\t\t\tthis._operation.dispose();\n\t\t\tthis._operation = null;\n\t\t}\n\t}\n\n\tprotected abstract _createDragScrollingOperation(position: IMouseTargetOutsideEditor, mouseEvent: EditorMouseEvent): DragScrollingOperation;\n}\n\nexport abstract class DragScrollingOperation extends Disposable {\n\n\tprotected _position: IMouseTargetOutsideEditor;\n\tprotected _mouseEvent: EditorMouseEvent;\n\tprivate _lastTime: number;\n\tprotected _animationFrameDisposable: IDisposable;\n\n\tconstructor(\n\t\tprotected readonly _context: ViewContext,\n\t\tprotected readonly _viewHelper: IPointerHandlerHelper,\n\t\tprotected readonly _mouseTargetFactory: MouseTargetFactory,\n\t\tprotected readonly _dispatchMouse: (position: IMouseTarget, inSelectionMode: boolean, revealType: NavigationCommandRevealType) => void,\n\t\tposition: IMouseTargetOutsideEditor,\n\t\tmouseEvent: EditorMouseEvent\n\t) {\n\t\tsuper();\n\t\tthis._position = position;\n\t\tthis._mouseEvent = mouseEvent;\n\t\tthis._lastTime = Date.now();\n\t\tthis._animationFrameDisposable = dom.scheduleAtNextAnimationFrame(dom.getWindow(mouseEvent.browserEvent), () => this._execute());\n\t}\n\n\tpublic override dispose(): void {\n\t\tthis._animationFrameDisposable.dispose();\n\t\tsuper.dispose();\n\t}\n\n\tpublic setPosition(position: IMouseTargetOutsideEditor, mouseEvent: EditorMouseEvent): void {\n\t\tthis._position = position;\n\t\tthis._mouseEvent = mouseEvent;\n\t}\n\n\t/**\n\t * update internal state and return elapsed ms since last time\n\t */\n\tprotected _tick(): number {\n\t\tconst now = Date.now();\n\t\tconst elapsed = now - this._lastTime;\n\t\tthis._lastTime = now;\n\t\treturn elapsed;\n\t}\n\n\tprotected abstract _execute(): void;\n\n}\n\nexport class TopBottomDragScrolling extends DragScrolling {\n\tprotected _createDragScrollingOperation(position: IMouseTargetOutsideEditor, mouseEvent: EditorMouseEvent): DragScrollingOperation {\n\t\treturn new TopBottomDragScrollingOperation(this._context, this._viewHelper, this._mouseTargetFactory, this._dispatchMouse, position, mouseEvent);\n\t}\n}\n\nexport class TopBottomDragScrollingOperation extends DragScrollingOperation {\n\n\t/**\n\t * get the number of lines per second to auto-scroll\n\t */\n\tprivate _getScrollSpeed(): number {\n\t\tconst lineHeight = this._context.configuration.options.get(EditorOption.lineHeight);\n\t\tconst viewportInLines = this._context.configuration.options.get(EditorOption.layoutInfo).height / lineHeight;\n\t\tconst outsideDistanceInLines = this._position.outsideDistance / lineHeight;\n\n\t\tif (outsideDistanceInLines <= 1.5) {\n\t\t\treturn Math.max(30, viewportInLines * (1 + outsideDistanceInLines));\n\t\t}\n\t\tif (outsideDistanceInLines <= 3) {\n\t\t\treturn Math.max(60, viewportInLines * (2 + outsideDistanceInLines));\n\t\t}\n\t\treturn Math.max(200, viewportInLines * (7 + outsideDistanceInLines));\n\t}\n\n\tprotected _execute(): void {\n\t\tconst lineHeight = this._context.configuration.options.get(EditorOption.lineHeight);\n\t\tconst scrollSpeedInLines = this._getScrollSpeed();\n\t\tconst elapsed = this._tick();\n\t\tconst scrollInPixels = scrollSpeedInLines * (elapsed / 1000) * lineHeight;\n\t\tconst scrollValue = (this._position.outsidePosition === 'above' ? -scrollInPixels : scrollInPixels);\n\n\t\tthis._context.viewModel.viewLayout.deltaScrollNow(0, scrollValue);\n\t\tthis._viewHelper.renderNow();\n\n\t\tconst viewportData = this._context.viewLayout.getLinesViewportData();\n\t\tconst edgeLineNumber = (this._position.outsidePosition === 'above' ? viewportData.startLineNumber : viewportData.endLineNumber);\n\t\tconst cannotScrollAnymore = (this._position.outsidePosition === 'above' ? viewportData.startLineNumber === 1 : viewportData.endLineNumber === this._context.viewModel.getLineCount());\n\n\t\t// First, try to find a position that matches the horizontal position of the mouse\n\t\tlet mouseTarget: IMouseTarget;\n\t\t{\n\t\t\tconst editorPos = createEditorPagePosition(this._viewHelper.viewDomNode);\n\t\t\tconst horizontalScrollbarHeight = this._context.configuration.options.get(EditorOption.layoutInfo).horizontalScrollbarHeight;\n\t\t\tconst pos = new PageCoordinates(this._mouseEvent.pos.x, editorPos.y + editorPos.height - horizontalScrollbarHeight - 0.1);\n\t\t\tconst relativePos = createCoordinatesRelativeToEditor(this._viewHelper.viewDomNode, editorPos, pos);\n\t\t\tmouseTarget = this._mouseTargetFactory.createMouseTarget(this._viewHelper.getLastRenderData(), editorPos, pos, relativePos, null);\n\t\t}\n\t\tif (!mouseTarget.position || mouseTarget.position.lineNumber !== edgeLineNumber || cannotScrollAnymore) {\n\t\t\tif (this._position.outsidePosition === 'above') {\n\t\t\t\tmouseTarget = MouseTarget.createOutsideEditor(this._position.mouseColumn, new Position(edgeLineNumber, 1), 'above', this._position.outsideDistance);\n\t\t\t} else {\n\t\t\t\tmouseTarget = MouseTarget.createOutsideEditor(this._position.mouseColumn, new Position(edgeLineNumber, this._context.viewModel.getLineMaxColumn(edgeLineNumber)), 'below', this._position.outsideDistance);\n\t\t\t}\n\t\t}\n\n\t\tthis._dispatchMouse(mouseTarget, true, NavigationCommandRevealType.None);\n\t\tthis._animationFrameDisposable = dom.scheduleAtNextAnimationFrame(dom.getWindow(mouseTarget.element), () => this._execute());\n\t}\n}\n\nexport class LeftRightDragScrolling extends DragScrolling {\n\tprotected _createDragScrollingOperation(position: IMouseTargetOutsideEditor, mouseEvent: EditorMouseEvent): DragScrollingOperation {\n\t\treturn new LeftRightDragScrollingOperation(this._context, this._viewHelper, this._mouseTargetFactory, this._dispatchMouse, position, mouseEvent);\n\t}\n}\n\nexport class LeftRightDragScrollingOperation extends DragScrollingOperation {\n\n\t/**\n\t * get the number of cols per second to auto-scroll\n\t */\n\tprivate _getScrollSpeed(): number {\n\t\tconst charWidth = this._context.configuration.options.get(EditorOption.fontInfo).typicalFullwidthCharacterWidth;\n\t\tconst viewportInChars = this._context.configuration.options.get(EditorOption.layoutInfo).contentWidth / charWidth;\n\t\tconst outsideDistanceInChars = this._position.outsideDistance / charWidth;\n\t\tif (outsideDistanceInChars <= 1.5) {\n\t\t\treturn Math.max(30, viewportInChars * (1 + outsideDistanceInChars));\n\t\t}\n\t\tif (outsideDistanceInChars <= 3) {\n\t\t\treturn Math.max(60, viewportInChars * (2 + outsideDistanceInChars));\n\t\t}\n\t\treturn Math.max(200, viewportInChars * (7 + outsideDistanceInChars));\n\t}\n\n\tprotected _execute(): void {\n\t\tconst charWidth = this._context.configuration.options.get(EditorOption.fontInfo).typicalFullwidthCharacterWidth;\n\t\tconst scrollSpeedInChars = this._getScrollSpeed();\n\t\tconst elapsed = this._tick();\n\t\tconst scrollInPixels = scrollSpeedInChars * (elapsed / 1000) * charWidth * 0.5;\n\t\tconst scrollValue = (this._position.outsidePosition === 'left' ? -scrollInPixels : scrollInPixels);\n\n\t\tthis._context.viewModel.viewLayout.deltaScrollNow(scrollValue, 0);\n\t\tthis._viewHelper.renderNow();\n\n\t\tif (!this._position.position) {\n\t\t\treturn;\n\t\t}\n\t\tconst edgeLineNumber = this._position.position.lineNumber;\n\n\t\t// First, try to find a position that matches the horizontal position of the mouse\n\t\tlet mouseTarget: IMouseTarget;\n\t\t{\n\t\t\tconst editorPos = createEditorPagePosition(this._viewHelper.viewDomNode);\n\t\t\tconst horizontalScrollbarHeight = this._context.configuration.options.get(EditorOption.layoutInfo).horizontalScrollbarHeight;\n\t\t\tconst pos = new PageCoordinates(this._mouseEvent.pos.x, editorPos.y + editorPos.height - horizontalScrollbarHeight - 0.1);\n\t\t\tconst relativePos = createCoordinatesRelativeToEditor(this._viewHelper.viewDomNode, editorPos, pos);\n\t\t\tmouseTarget = this._mouseTargetFactory.createMouseTarget(this._viewHelper.getLastRenderData(), editorPos, pos, relativePos, null);\n\t\t}\n\n\t\tif (this._position.outsidePosition === 'left') {\n\t\t\tmouseTarget = MouseTarget.createOutsideEditor(mouseTarget.mouseColumn, new Position(edgeLineNumber, mouseTarget.mouseColumn), 'left', this._position.outsideDistance);\n\t\t} else {\n\t\t\tmouseTarget = MouseTarget.createOutsideEditor(mouseTarget.mouseColumn, new Position(edgeLineNumber, mouseTarget.mouseColumn), 'right', this._position.outsideDistance);\n\t\t}\n\n\t\tthis._dispatchMouse(mouseTarget, true, NavigationCommandRevealType.None);\n\t\tthis._animationFrameDisposable = dom.scheduleAtNextAnimationFrame(dom.getWindow(mouseTarget.element), () => this._execute());\n\t}\n}\n"]}
|
|
@@ -1,6 +1,46 @@
|
|
|
1
1
|
import { isWindows } from '../../../../base/common/platform.js';
|
|
2
2
|
import { Mimes } from '../../../../base/common/mime.js';
|
|
3
|
-
|
|
3
|
+
import { LogLevel } from '../../../../platform/log/common/log.js';
|
|
4
|
+
import { generateUuid } from '../../../../base/common/uuid.js';
|
|
5
|
+
export function ensureClipboardGetsEditorSelection(e, context, logService, isFirefox) {
|
|
6
|
+
const viewModel = context.viewModel;
|
|
7
|
+
const options = context.configuration.options;
|
|
8
|
+
let id = undefined;
|
|
9
|
+
if (logService.getLevel() === LogLevel.Trace) {
|
|
10
|
+
id = generateUuid();
|
|
11
|
+
}
|
|
12
|
+
const { dataToCopy, storedMetadata } = generateDataToCopyAndStoreInMemory(viewModel, options, id, isFirefox);
|
|
13
|
+
// !!!!!
|
|
14
|
+
// This is a workaround for what we think is an Electron bug where
|
|
15
|
+
// execCommand('copy') does not always work (it does not fire a clipboard event)
|
|
16
|
+
// !!!!!
|
|
17
|
+
// We signal that we have executed a copy command
|
|
18
|
+
CopyOptions.electronBugWorkaroundCopyEventHasFired = true;
|
|
19
|
+
e.preventDefault();
|
|
20
|
+
if (e.clipboardData) {
|
|
21
|
+
ClipboardEventUtils.setTextData(e.clipboardData, dataToCopy.text, dataToCopy.html, storedMetadata);
|
|
22
|
+
}
|
|
23
|
+
logService.trace('ensureClipboardGetsEditorSelection with id : ', id, ' with text.length: ', dataToCopy.text.length);
|
|
24
|
+
}
|
|
25
|
+
export function generateDataToCopyAndStoreInMemory(viewModel, options, id, isFirefox) {
|
|
26
|
+
const emptySelectionClipboard = options.get(45 /* EditorOption.emptySelectionClipboard */);
|
|
27
|
+
const copyWithSyntaxHighlighting = options.get(31 /* EditorOption.copyWithSyntaxHighlighting */);
|
|
28
|
+
const selections = viewModel.getCursorStates().map(cursorState => cursorState.modelState.selection);
|
|
29
|
+
const dataToCopy = getDataToCopy(viewModel, selections, emptySelectionClipboard, copyWithSyntaxHighlighting);
|
|
30
|
+
const storedMetadata = {
|
|
31
|
+
version: 1,
|
|
32
|
+
id,
|
|
33
|
+
isFromEmptySelection: dataToCopy.isFromEmptySelection,
|
|
34
|
+
multicursorText: dataToCopy.multicursorText,
|
|
35
|
+
mode: dataToCopy.mode
|
|
36
|
+
};
|
|
37
|
+
InMemoryClipboardMetadataManager.INSTANCE.set(
|
|
38
|
+
// When writing "LINE\r\n" to the clipboard and then pasting,
|
|
39
|
+
// Firefox pastes "LINE\n", so let's work around this quirk
|
|
40
|
+
(isFirefox ? dataToCopy.text.replace(/\r\n/g, '\n') : dataToCopy.text), storedMetadata);
|
|
41
|
+
return { dataToCopy, storedMetadata };
|
|
42
|
+
}
|
|
43
|
+
function getDataToCopy(viewModel, modelSelections, emptySelectionClipboard, copyWithSyntaxHighlighting) {
|
|
4
44
|
const rawTextToCopy = viewModel.getPlainTextToCopy(modelSelections, emptySelectionClipboard, isWindows);
|
|
5
45
|
const newLineCharacter = viewModel.model.getEOL();
|
|
6
46
|
const isFromEmptySelection = (emptySelectionClipboard && modelSelections.length === 1 && modelSelections[0].isEmpty());
|
|
@@ -24,6 +64,33 @@ export function getDataToCopy(viewModel, modelSelections, emptySelectionClipboar
|
|
|
24
64
|
};
|
|
25
65
|
return dataToCopy;
|
|
26
66
|
}
|
|
67
|
+
export function computePasteData(e, context, logService) {
|
|
68
|
+
e.preventDefault();
|
|
69
|
+
if (!e.clipboardData) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
let [text, metadata] = ClipboardEventUtils.getTextData(e.clipboardData);
|
|
73
|
+
logService.trace('computePasteData with id : ', metadata?.id, ' with text.length: ', text.length);
|
|
74
|
+
if (!text) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
PasteOptions.electronBugWorkaroundPasteEventHasFired = true;
|
|
78
|
+
metadata = metadata || InMemoryClipboardMetadataManager.INSTANCE.get(text);
|
|
79
|
+
return getPasteDataFromMetadata(text, metadata, context);
|
|
80
|
+
}
|
|
81
|
+
export function getPasteDataFromMetadata(text, metadata, context) {
|
|
82
|
+
let pasteOnNewLine = false;
|
|
83
|
+
let multicursorText = null;
|
|
84
|
+
let mode = null;
|
|
85
|
+
if (metadata) {
|
|
86
|
+
const options = context.configuration.options;
|
|
87
|
+
const emptySelectionClipboard = options.get(45 /* EditorOption.emptySelectionClipboard */);
|
|
88
|
+
pasteOnNewLine = emptySelectionClipboard && !!metadata.isFromEmptySelection;
|
|
89
|
+
multicursorText = typeof metadata.multicursorText !== 'undefined' ? metadata.multicursorText : null;
|
|
90
|
+
mode = metadata.mode;
|
|
91
|
+
}
|
|
92
|
+
return { text, pasteOnNewLine, multicursorText, mode };
|
|
93
|
+
}
|
|
27
94
|
/**
|
|
28
95
|
* Every time we write to the clipboard, we record a bit of extra metadata here.
|
|
29
96
|
* Every time we read from the cipboard, if the text matches our last written text,
|
|
@@ -47,7 +114,11 @@ export class InMemoryClipboardMetadataManager {
|
|
|
47
114
|
}
|
|
48
115
|
}
|
|
49
116
|
export const CopyOptions = {
|
|
50
|
-
forceCopyWithSyntaxHighlighting: false
|
|
117
|
+
forceCopyWithSyntaxHighlighting: false,
|
|
118
|
+
electronBugWorkaroundCopyEventHasFired: false
|
|
119
|
+
};
|
|
120
|
+
export const PasteOptions = {
|
|
121
|
+
electronBugWorkaroundPasteEventHasFired: false
|
|
51
122
|
};
|
|
52
123
|
export const ClipboardEventUtils = {
|
|
53
124
|
getTextData(clipboardData) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/browser/controller/editContext/clipboardUtils.ts","vs/editor/browser/controller/editContext/clipboardUtils.ts"],"names":[],"mappings":"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","file":"clipboardUtils.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { IViewModel } from '../../../common/viewModel.js';\nimport { Range } from '../../../common/core/range.js';\nimport { isWindows } from '../../../../base/common/platform.js';\nimport { Mimes } from '../../../../base/common/mime.js';\n\nexport function getDataToCopy(viewModel: IViewModel, modelSelections: Range[], emptySelectionClipboard: boolean, copyWithSyntaxHighlighting: boolean): ClipboardDataToCopy {\n\tconst rawTextToCopy = viewModel.getPlainTextToCopy(modelSelections, emptySelectionClipboard, isWindows);\n\tconst newLineCharacter = viewModel.model.getEOL();\n\n\tconst isFromEmptySelection = (emptySelectionClipboard && modelSelections.length === 1 && modelSelections[0].isEmpty());\n\tconst multicursorText = (Array.isArray(rawTextToCopy) ? rawTextToCopy : null);\n\tconst text = (Array.isArray(rawTextToCopy) ? rawTextToCopy.join(newLineCharacter) : rawTextToCopy);\n\n\tlet html: string | null | undefined = undefined;\n\tlet mode: string | null = null;\n\tif (CopyOptions.forceCopyWithSyntaxHighlighting || (copyWithSyntaxHighlighting && text.length < 65536)) {\n\t\tconst richText = viewModel.getRichTextToCopy(modelSelections, emptySelectionClipboard);\n\t\tif (richText) {\n\t\t\thtml = richText.html;\n\t\t\tmode = richText.mode;\n\t\t}\n\t}\n\tconst dataToCopy: ClipboardDataToCopy = {\n\t\tisFromEmptySelection,\n\t\tmulticursorText,\n\t\ttext,\n\t\thtml,\n\t\tmode\n\t};\n\treturn dataToCopy;\n}\n\n/**\n * Every time we write to the clipboard, we record a bit of extra metadata here.\n * Every time we read from the cipboard, if the text matches our last written text,\n * we can fetch the previous metadata.\n */\nexport class InMemoryClipboardMetadataManager {\n\tpublic static readonly INSTANCE = new InMemoryClipboardMetadataManager();\n\n\tprivate _lastState: InMemoryClipboardMetadata | null;\n\n\tconstructor() {\n\t\tthis._lastState = null;\n\t}\n\n\tpublic set(lastCopiedValue: string, data: ClipboardStoredMetadata): void {\n\t\tthis._lastState = { lastCopiedValue, data };\n\t}\n\n\tpublic get(pastedText: string): ClipboardStoredMetadata | null {\n\t\tif (this._lastState && this._lastState.lastCopiedValue === pastedText) {\n\t\t\t// match!\n\t\t\treturn this._lastState.data;\n\t\t}\n\t\tthis._lastState = null;\n\t\treturn null;\n\t}\n}\n\nexport interface ClipboardDataToCopy {\n\tisFromEmptySelection: boolean;\n\tmulticursorText: string[] | null | undefined;\n\ttext: string;\n\thtml: string | null | undefined;\n\tmode: string | null;\n}\n\nexport interface ClipboardStoredMetadata {\n\tversion: 1;\n\tid: string | undefined;\n\tisFromEmptySelection: boolean | undefined;\n\tmulticursorText: string[] | null | undefined;\n\tmode: string | null;\n}\n\nexport const CopyOptions = {\n\tforceCopyWithSyntaxHighlighting: false\n};\n\ninterface InMemoryClipboardMetadata {\n\tlastCopiedValue: string;\n\tdata: ClipboardStoredMetadata;\n}\n\nexport const ClipboardEventUtils = {\n\n\tgetTextData(clipboardData: DataTransfer): [string, ClipboardStoredMetadata | null] {\n\t\tconst text = clipboardData.getData(Mimes.text);\n\t\tlet metadata: ClipboardStoredMetadata | null = null;\n\t\tconst rawmetadata = clipboardData.getData('vscode-editor-data');\n\t\tif (typeof rawmetadata === 'string') {\n\t\t\ttry {\n\t\t\t\tmetadata = <ClipboardStoredMetadata>JSON.parse(rawmetadata);\n\t\t\t\tif (metadata.version !== 1) {\n\t\t\t\t\tmetadata = null;\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t// no problem!\n\t\t\t}\n\t\t}\n\t\tif (text.length === 0 && metadata === null && clipboardData.files.length > 0) {\n\t\t\t// no textual data pasted, generate text from file names\n\t\t\tconst files: File[] = Array.prototype.slice.call(clipboardData.files, 0);\n\t\t\treturn [files.map(file => file.name).join('\\n'), null];\n\t\t}\n\t\treturn [text, metadata];\n\t},\n\n\tsetTextData(clipboardData: DataTransfer, text: string, html: string | null | undefined, metadata: ClipboardStoredMetadata): void {\n\t\tclipboardData.setData(Mimes.text, text);\n\t\tif (typeof html === 'string') {\n\t\t\tclipboardData.setData('text/html', html);\n\t\t}\n\t\tclipboardData.setData('vscode-editor-data', JSON.stringify(metadata));\n\t}\n};\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { IViewModel } from '../../../common/viewModel.js';\nimport { Range } from '../../../common/core/range.js';\nimport { isWindows } from '../../../../base/common/platform.js';\nimport { Mimes } from '../../../../base/common/mime.js';\n\nexport function getDataToCopy(viewModel: IViewModel, modelSelections: Range[], emptySelectionClipboard: boolean, copyWithSyntaxHighlighting: boolean): ClipboardDataToCopy {\n\tconst rawTextToCopy = viewModel.getPlainTextToCopy(modelSelections, emptySelectionClipboard, isWindows);\n\tconst newLineCharacter = viewModel.model.getEOL();\n\n\tconst isFromEmptySelection = (emptySelectionClipboard && modelSelections.length === 1 && modelSelections[0].isEmpty());\n\tconst multicursorText = (Array.isArray(rawTextToCopy) ? rawTextToCopy : null);\n\tconst text = (Array.isArray(rawTextToCopy) ? rawTextToCopy.join(newLineCharacter) : rawTextToCopy);\n\n\tlet html: string | null | undefined = undefined;\n\tlet mode: string | null = null;\n\tif (CopyOptions.forceCopyWithSyntaxHighlighting || (copyWithSyntaxHighlighting && text.length < 65536)) {\n\t\tconst richText = viewModel.getRichTextToCopy(modelSelections, emptySelectionClipboard);\n\t\tif (richText) {\n\t\t\thtml = richText.html;\n\t\t\tmode = richText.mode;\n\t\t}\n\t}\n\tconst dataToCopy: ClipboardDataToCopy = {\n\t\tisFromEmptySelection,\n\t\tmulticursorText,\n\t\ttext,\n\t\thtml,\n\t\tmode\n\t};\n\treturn dataToCopy;\n}\n\n/**\n * Every time we write to the clipboard, we record a bit of extra metadata here.\n * Every time we read from the cipboard, if the text matches our last written text,\n * we can fetch the previous metadata.\n */\nexport class InMemoryClipboardMetadataManager {\n\tpublic static readonly INSTANCE = new InMemoryClipboardMetadataManager();\n\n\tprivate _lastState: InMemoryClipboardMetadata | null;\n\n\tconstructor() {\n\t\tthis._lastState = null;\n\t}\n\n\tpublic set(lastCopiedValue: string, data: ClipboardStoredMetadata): void {\n\t\tthis._lastState = { lastCopiedValue, data };\n\t}\n\n\tpublic get(pastedText: string): ClipboardStoredMetadata | null {\n\t\tif (this._lastState && this._lastState.lastCopiedValue === pastedText) {\n\t\t\t// match!\n\t\t\treturn this._lastState.data;\n\t\t}\n\t\tthis._lastState = null;\n\t\treturn null;\n\t}\n}\n\nexport interface ClipboardDataToCopy {\n\tisFromEmptySelection: boolean;\n\tmulticursorText: string[] | null | undefined;\n\ttext: string;\n\thtml: string | null | undefined;\n\tmode: string | null;\n}\n\nexport interface ClipboardStoredMetadata {\n\tversion: 1;\n\tid: string | undefined;\n\tisFromEmptySelection: boolean | undefined;\n\tmulticursorText: string[] | null | undefined;\n\tmode: string | null;\n}\n\nexport const CopyOptions = {\n\tforceCopyWithSyntaxHighlighting: false\n};\n\ninterface InMemoryClipboardMetadata {\n\tlastCopiedValue: string;\n\tdata: ClipboardStoredMetadata;\n}\n\nexport const ClipboardEventUtils = {\n\n\tgetTextData(clipboardData: DataTransfer): [string, ClipboardStoredMetadata | null] {\n\t\tconst text = clipboardData.getData(Mimes.text);\n\t\tlet metadata: ClipboardStoredMetadata | null = null;\n\t\tconst rawmetadata = clipboardData.getData('vscode-editor-data');\n\t\tif (typeof rawmetadata === 'string') {\n\t\t\ttry {\n\t\t\t\tmetadata = <ClipboardStoredMetadata>JSON.parse(rawmetadata);\n\t\t\t\tif (metadata.version !== 1) {\n\t\t\t\t\tmetadata = null;\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t// no problem!\n\t\t\t}\n\t\t}\n\t\tif (text.length === 0 && metadata === null && clipboardData.files.length > 0) {\n\t\t\t// no textual data pasted, generate text from file names\n\t\t\tconst files: File[] = Array.prototype.slice.call(clipboardData.files, 0);\n\t\t\treturn [files.map(file => file.name).join('\\n'), null];\n\t\t}\n\t\treturn [text, metadata];\n\t},\n\n\tsetTextData(clipboardData: DataTransfer, text: string, html: string | null | undefined, metadata: ClipboardStoredMetadata): void {\n\t\tclipboardData.setData(Mimes.text, text);\n\t\tif (typeof html === 'string') {\n\t\t\tclipboardData.setData('text/html', html);\n\t\t}\n\t\tclipboardData.setData('vscode-editor-data', JSON.stringify(metadata));\n\t}\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/browser/controller/editContext/clipboardUtils.ts","vs/editor/browser/controller/editContext/clipboardUtils.ts"],"names":[],"mappings":"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","file":"clipboardUtils.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { IViewModel } from '../../../common/viewModel.js';\nimport { Range } from '../../../common/core/range.js';\nimport { isWindows } from '../../../../base/common/platform.js';\nimport { Mimes } from '../../../../base/common/mime.js';\nimport { ViewContext } from '../../../common/viewModel/viewContext.js';\nimport { ILogService, LogLevel } from '../../../../platform/log/common/log.js';\nimport { EditorOption, IComputedEditorOptions } from '../../../common/config/editorOptions.js';\nimport { generateUuid } from '../../../../base/common/uuid.js';\n\nexport function ensureClipboardGetsEditorSelection(e: ClipboardEvent, context: ViewContext, logService: ILogService, isFirefox: boolean): void {\n\tconst viewModel = context.viewModel;\n\tconst options = context.configuration.options;\n\tlet id: string | undefined = undefined;\n\tif (logService.getLevel() === LogLevel.Trace) {\n\t\tid = generateUuid();\n\t}\n\n\tconst { dataToCopy, storedMetadata } = generateDataToCopyAndStoreInMemory(viewModel, options, id, isFirefox);\n\n\t// !!!!!\n\t// This is a workaround for what we think is an Electron bug where\n\t// execCommand('copy') does not always work (it does not fire a clipboard event)\n\t// !!!!!\n\t// We signal that we have executed a copy command\n\tCopyOptions.electronBugWorkaroundCopyEventHasFired = true;\n\n\te.preventDefault();\n\tif (e.clipboardData) {\n\t\tClipboardEventUtils.setTextData(e.clipboardData, dataToCopy.text, dataToCopy.html, storedMetadata);\n\t}\n\tlogService.trace('ensureClipboardGetsEditorSelection with id : ', id, ' with text.length: ', dataToCopy.text.length);\n}\n\nexport function generateDataToCopyAndStoreInMemory(viewModel: IViewModel, options: IComputedEditorOptions, id: string | undefined, isFirefox: boolean) {\n\tconst emptySelectionClipboard = options.get(EditorOption.emptySelectionClipboard);\n\tconst copyWithSyntaxHighlighting = options.get(EditorOption.copyWithSyntaxHighlighting);\n\tconst selections = viewModel.getCursorStates().map(cursorState => cursorState.modelState.selection);\n\tconst dataToCopy = getDataToCopy(viewModel, selections, emptySelectionClipboard, copyWithSyntaxHighlighting);\n\tconst storedMetadata: ClipboardStoredMetadata = {\n\t\tversion: 1,\n\t\tid,\n\t\tisFromEmptySelection: dataToCopy.isFromEmptySelection,\n\t\tmulticursorText: dataToCopy.multicursorText,\n\t\tmode: dataToCopy.mode\n\t};\n\tInMemoryClipboardMetadataManager.INSTANCE.set(\n\t\t// When writing \"LINE\\r\\n\" to the clipboard and then pasting,\n\t\t// Firefox pastes \"LINE\\n\", so let's work around this quirk\n\t\t(isFirefox ? dataToCopy.text.replace(/\\r\\n/g, '\\n') : dataToCopy.text),\n\t\tstoredMetadata\n\t);\n\treturn { dataToCopy, storedMetadata };\n}\n\nfunction getDataToCopy(viewModel: IViewModel, modelSelections: Range[], emptySelectionClipboard: boolean, copyWithSyntaxHighlighting: boolean): ClipboardDataToCopy {\n\tconst rawTextToCopy = viewModel.getPlainTextToCopy(modelSelections, emptySelectionClipboard, isWindows);\n\tconst newLineCharacter = viewModel.model.getEOL();\n\n\tconst isFromEmptySelection = (emptySelectionClipboard && modelSelections.length === 1 && modelSelections[0].isEmpty());\n\tconst multicursorText = (Array.isArray(rawTextToCopy) ? rawTextToCopy : null);\n\tconst text = (Array.isArray(rawTextToCopy) ? rawTextToCopy.join(newLineCharacter) : rawTextToCopy);\n\n\tlet html: string | null | undefined = undefined;\n\tlet mode: string | null = null;\n\tif (CopyOptions.forceCopyWithSyntaxHighlighting || (copyWithSyntaxHighlighting && text.length < 65536)) {\n\t\tconst richText = viewModel.getRichTextToCopy(modelSelections, emptySelectionClipboard);\n\t\tif (richText) {\n\t\t\thtml = richText.html;\n\t\t\tmode = richText.mode;\n\t\t}\n\t}\n\tconst dataToCopy: ClipboardDataToCopy = {\n\t\tisFromEmptySelection,\n\t\tmulticursorText,\n\t\ttext,\n\t\thtml,\n\t\tmode\n\t};\n\treturn dataToCopy;\n}\n\nexport interface IPasteData {\n\ttext: string;\n\tpasteOnNewLine: boolean;\n\tmulticursorText: string[] | null;\n\tmode: string | null;\n}\n\nexport function computePasteData(e: ClipboardEvent, context: ViewContext, logService: ILogService): IPasteData | undefined {\n\te.preventDefault();\n\tif (!e.clipboardData) {\n\t\treturn;\n\t}\n\tlet [text, metadata] = ClipboardEventUtils.getTextData(e.clipboardData);\n\tlogService.trace('computePasteData with id : ', metadata?.id, ' with text.length: ', text.length);\n\tif (!text) {\n\t\treturn;\n\t}\n\tPasteOptions.electronBugWorkaroundPasteEventHasFired = true;\n\tmetadata = metadata || InMemoryClipboardMetadataManager.INSTANCE.get(text);\n\treturn getPasteDataFromMetadata(text, metadata, context);\n}\n\nexport function getPasteDataFromMetadata(text: string, metadata: ClipboardStoredMetadata | null, context: ViewContext): IPasteData {\n\tlet pasteOnNewLine = false;\n\tlet multicursorText: string[] | null = null;\n\tlet mode: string | null = null;\n\tif (metadata) {\n\t\tconst options = context.configuration.options;\n\t\tconst emptySelectionClipboard = options.get(EditorOption.emptySelectionClipboard);\n\t\tpasteOnNewLine = emptySelectionClipboard && !!metadata.isFromEmptySelection;\n\t\tmulticursorText = typeof metadata.multicursorText !== 'undefined' ? metadata.multicursorText : null;\n\t\tmode = metadata.mode;\n\t}\n\treturn { text, pasteOnNewLine, multicursorText, mode };\n}\n/**\n * Every time we write to the clipboard, we record a bit of extra metadata here.\n * Every time we read from the cipboard, if the text matches our last written text,\n * we can fetch the previous metadata.\n */\nexport class InMemoryClipboardMetadataManager {\n\tpublic static readonly INSTANCE = new InMemoryClipboardMetadataManager();\n\n\tprivate _lastState: InMemoryClipboardMetadata | null;\n\n\tconstructor() {\n\t\tthis._lastState = null;\n\t}\n\n\tpublic set(lastCopiedValue: string, data: ClipboardStoredMetadata): void {\n\t\tthis._lastState = { lastCopiedValue, data };\n\t}\n\n\tpublic get(pastedText: string): ClipboardStoredMetadata | null {\n\t\tif (this._lastState && this._lastState.lastCopiedValue === pastedText) {\n\t\t\t// match!\n\t\t\treturn this._lastState.data;\n\t\t}\n\t\tthis._lastState = null;\n\t\treturn null;\n\t}\n}\n\nexport interface ClipboardDataToCopy {\n\tisFromEmptySelection: boolean;\n\tmulticursorText: string[] | null | undefined;\n\ttext: string;\n\thtml: string | null | undefined;\n\tmode: string | null;\n}\n\nexport interface ClipboardStoredMetadata {\n\tversion: 1;\n\tid: string | undefined;\n\tisFromEmptySelection: boolean | undefined;\n\tmulticursorText: string[] | null | undefined;\n\tmode: string | null;\n}\n\nexport const CopyOptions = {\n\tforceCopyWithSyntaxHighlighting: false,\n\telectronBugWorkaroundCopyEventHasFired: false\n};\n\nexport const PasteOptions = {\n\telectronBugWorkaroundPasteEventHasFired: false\n};\n\ninterface InMemoryClipboardMetadata {\n\tlastCopiedValue: string;\n\tdata: ClipboardStoredMetadata;\n}\n\nexport const ClipboardEventUtils = {\n\n\tgetTextData(clipboardData: DataTransfer): [string, ClipboardStoredMetadata | null] {\n\t\tconst text = clipboardData.getData(Mimes.text);\n\t\tlet metadata: ClipboardStoredMetadata | null = null;\n\t\tconst rawmetadata = clipboardData.getData('vscode-editor-data');\n\t\tif (typeof rawmetadata === 'string') {\n\t\t\ttry {\n\t\t\t\tmetadata = <ClipboardStoredMetadata>JSON.parse(rawmetadata);\n\t\t\t\tif (metadata.version !== 1) {\n\t\t\t\t\tmetadata = null;\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t// no problem!\n\t\t\t}\n\t\t}\n\t\tif (text.length === 0 && metadata === null && clipboardData.files.length > 0) {\n\t\t\t// no textual data pasted, generate text from file names\n\t\t\tconst files: File[] = Array.prototype.slice.call(clipboardData.files, 0);\n\t\t\treturn [files.map(file => file.name).join('\\n'), null];\n\t\t}\n\t\treturn [text, metadata];\n\t},\n\n\tsetTextData(clipboardData: DataTransfer, text: string, html: string | null | undefined, metadata: ClipboardStoredMetadata): void {\n\t\tclipboardData.setData(Mimes.text, text);\n\t\tif (typeof html === 'string') {\n\t\t\tclipboardData.setData('text/html', html);\n\t\t}\n\t\tclipboardData.setData('vscode-editor-data', JSON.stringify(metadata));\n\t}\n};\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { IViewModel } from '../../../common/viewModel.js';\nimport { Range } from '../../../common/core/range.js';\nimport { isWindows } from '../../../../base/common/platform.js';\nimport { Mimes } from '../../../../base/common/mime.js';\nimport { ViewContext } from '../../../common/viewModel/viewContext.js';\nimport { ILogService, LogLevel } from '../../../../platform/log/common/log.js';\nimport { EditorOption, IComputedEditorOptions } from '../../../common/config/editorOptions.js';\nimport { generateUuid } from '../../../../base/common/uuid.js';\n\nexport function ensureClipboardGetsEditorSelection(e: ClipboardEvent, context: ViewContext, logService: ILogService, isFirefox: boolean): void {\n\tconst viewModel = context.viewModel;\n\tconst options = context.configuration.options;\n\tlet id: string | undefined = undefined;\n\tif (logService.getLevel() === LogLevel.Trace) {\n\t\tid = generateUuid();\n\t}\n\n\tconst { dataToCopy, storedMetadata } = generateDataToCopyAndStoreInMemory(viewModel, options, id, isFirefox);\n\n\t// !!!!!\n\t// This is a workaround for what we think is an Electron bug where\n\t// execCommand('copy') does not always work (it does not fire a clipboard event)\n\t// !!!!!\n\t// We signal that we have executed a copy command\n\tCopyOptions.electronBugWorkaroundCopyEventHasFired = true;\n\n\te.preventDefault();\n\tif (e.clipboardData) {\n\t\tClipboardEventUtils.setTextData(e.clipboardData, dataToCopy.text, dataToCopy.html, storedMetadata);\n\t}\n\tlogService.trace('ensureClipboardGetsEditorSelection with id : ', id, ' with text.length: ', dataToCopy.text.length);\n}\n\nexport function generateDataToCopyAndStoreInMemory(viewModel: IViewModel, options: IComputedEditorOptions, id: string | undefined, isFirefox: boolean) {\n\tconst emptySelectionClipboard = options.get(EditorOption.emptySelectionClipboard);\n\tconst copyWithSyntaxHighlighting = options.get(EditorOption.copyWithSyntaxHighlighting);\n\tconst selections = viewModel.getCursorStates().map(cursorState => cursorState.modelState.selection);\n\tconst dataToCopy = getDataToCopy(viewModel, selections, emptySelectionClipboard, copyWithSyntaxHighlighting);\n\tconst storedMetadata: ClipboardStoredMetadata = {\n\t\tversion: 1,\n\t\tid,\n\t\tisFromEmptySelection: dataToCopy.isFromEmptySelection,\n\t\tmulticursorText: dataToCopy.multicursorText,\n\t\tmode: dataToCopy.mode\n\t};\n\tInMemoryClipboardMetadataManager.INSTANCE.set(\n\t\t// When writing \"LINE\\r\\n\" to the clipboard and then pasting,\n\t\t// Firefox pastes \"LINE\\n\", so let's work around this quirk\n\t\t(isFirefox ? dataToCopy.text.replace(/\\r\\n/g, '\\n') : dataToCopy.text),\n\t\tstoredMetadata\n\t);\n\treturn { dataToCopy, storedMetadata };\n}\n\nfunction getDataToCopy(viewModel: IViewModel, modelSelections: Range[], emptySelectionClipboard: boolean, copyWithSyntaxHighlighting: boolean): ClipboardDataToCopy {\n\tconst rawTextToCopy = viewModel.getPlainTextToCopy(modelSelections, emptySelectionClipboard, isWindows);\n\tconst newLineCharacter = viewModel.model.getEOL();\n\n\tconst isFromEmptySelection = (emptySelectionClipboard && modelSelections.length === 1 && modelSelections[0].isEmpty());\n\tconst multicursorText = (Array.isArray(rawTextToCopy) ? rawTextToCopy : null);\n\tconst text = (Array.isArray(rawTextToCopy) ? rawTextToCopy.join(newLineCharacter) : rawTextToCopy);\n\n\tlet html: string | null | undefined = undefined;\n\tlet mode: string | null = null;\n\tif (CopyOptions.forceCopyWithSyntaxHighlighting || (copyWithSyntaxHighlighting && text.length < 65536)) {\n\t\tconst richText = viewModel.getRichTextToCopy(modelSelections, emptySelectionClipboard);\n\t\tif (richText) {\n\t\t\thtml = richText.html;\n\t\t\tmode = richText.mode;\n\t\t}\n\t}\n\tconst dataToCopy: ClipboardDataToCopy = {\n\t\tisFromEmptySelection,\n\t\tmulticursorText,\n\t\ttext,\n\t\thtml,\n\t\tmode\n\t};\n\treturn dataToCopy;\n}\n\nexport interface IPasteData {\n\ttext: string;\n\tpasteOnNewLine: boolean;\n\tmulticursorText: string[] | null;\n\tmode: string | null;\n}\n\nexport function computePasteData(e: ClipboardEvent, context: ViewContext, logService: ILogService): IPasteData | undefined {\n\te.preventDefault();\n\tif (!e.clipboardData) {\n\t\treturn;\n\t}\n\tlet [text, metadata] = ClipboardEventUtils.getTextData(e.clipboardData);\n\tlogService.trace('computePasteData with id : ', metadata?.id, ' with text.length: ', text.length);\n\tif (!text) {\n\t\treturn;\n\t}\n\tPasteOptions.electronBugWorkaroundPasteEventHasFired = true;\n\tmetadata = metadata || InMemoryClipboardMetadataManager.INSTANCE.get(text);\n\treturn getPasteDataFromMetadata(text, metadata, context);\n}\n\nexport function getPasteDataFromMetadata(text: string, metadata: ClipboardStoredMetadata | null, context: ViewContext): IPasteData {\n\tlet pasteOnNewLine = false;\n\tlet multicursorText: string[] | null = null;\n\tlet mode: string | null = null;\n\tif (metadata) {\n\t\tconst options = context.configuration.options;\n\t\tconst emptySelectionClipboard = options.get(EditorOption.emptySelectionClipboard);\n\t\tpasteOnNewLine = emptySelectionClipboard && !!metadata.isFromEmptySelection;\n\t\tmulticursorText = typeof metadata.multicursorText !== 'undefined' ? metadata.multicursorText : null;\n\t\tmode = metadata.mode;\n\t}\n\treturn { text, pasteOnNewLine, multicursorText, mode };\n}\n/**\n * Every time we write to the clipboard, we record a bit of extra metadata here.\n * Every time we read from the cipboard, if the text matches our last written text,\n * we can fetch the previous metadata.\n */\nexport class InMemoryClipboardMetadataManager {\n\tpublic static readonly INSTANCE = new InMemoryClipboardMetadataManager();\n\n\tprivate _lastState: InMemoryClipboardMetadata | null;\n\n\tconstructor() {\n\t\tthis._lastState = null;\n\t}\n\n\tpublic set(lastCopiedValue: string, data: ClipboardStoredMetadata): void {\n\t\tthis._lastState = { lastCopiedValue, data };\n\t}\n\n\tpublic get(pastedText: string): ClipboardStoredMetadata | null {\n\t\tif (this._lastState && this._lastState.lastCopiedValue === pastedText) {\n\t\t\t// match!\n\t\t\treturn this._lastState.data;\n\t\t}\n\t\tthis._lastState = null;\n\t\treturn null;\n\t}\n}\n\nexport interface ClipboardDataToCopy {\n\tisFromEmptySelection: boolean;\n\tmulticursorText: string[] | null | undefined;\n\ttext: string;\n\thtml: string | null | undefined;\n\tmode: string | null;\n}\n\nexport interface ClipboardStoredMetadata {\n\tversion: 1;\n\tid: string | undefined;\n\tisFromEmptySelection: boolean | undefined;\n\tmulticursorText: string[] | null | undefined;\n\tmode: string | null;\n}\n\nexport const CopyOptions = {\n\tforceCopyWithSyntaxHighlighting: false,\n\telectronBugWorkaroundCopyEventHasFired: false\n};\n\nexport const PasteOptions = {\n\telectronBugWorkaroundPasteEventHasFired: false\n};\n\ninterface InMemoryClipboardMetadata {\n\tlastCopiedValue: string;\n\tdata: ClipboardStoredMetadata;\n}\n\nexport const ClipboardEventUtils = {\n\n\tgetTextData(clipboardData: DataTransfer): [string, ClipboardStoredMetadata | null] {\n\t\tconst text = clipboardData.getData(Mimes.text);\n\t\tlet metadata: ClipboardStoredMetadata | null = null;\n\t\tconst rawmetadata = clipboardData.getData('vscode-editor-data');\n\t\tif (typeof rawmetadata === 'string') {\n\t\t\ttry {\n\t\t\t\tmetadata = <ClipboardStoredMetadata>JSON.parse(rawmetadata);\n\t\t\t\tif (metadata.version !== 1) {\n\t\t\t\t\tmetadata = null;\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t// no problem!\n\t\t\t}\n\t\t}\n\t\tif (text.length === 0 && metadata === null && clipboardData.files.length > 0) {\n\t\t\t// no textual data pasted, generate text from file names\n\t\t\tconst files: File[] = Array.prototype.slice.call(clipboardData.files, 0);\n\t\t\treturn [files.map(file => file.name).join('\\n'), null];\n\t\t}\n\t\treturn [text, metadata];\n\t},\n\n\tsetTextData(clipboardData: DataTransfer, text: string, html: string | null | undefined, metadata: ClipboardStoredMetadata): void {\n\t\tclipboardData.setData(Mimes.text, text);\n\t\tif (typeof html === 'string') {\n\t\t\tclipboardData.setData('text/html', html);\n\t\t}\n\t\tclipboardData.setData('vscode-editor-data', JSON.stringify(metadata));\n\t}\n};\n"]}
|
|
@@ -17,7 +17,7 @@ import { addDisposableListener, getActiveElement, getWindow, getWindowId } from
|
|
|
17
17
|
import { FastDomNode } from '../../../../../base/browser/fastDomNode.js';
|
|
18
18
|
import { StandardKeyboardEvent } from '../../../../../base/browser/keyboardEvent.js';
|
|
19
19
|
import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';
|
|
20
|
-
import {
|
|
20
|
+
import { ensureClipboardGetsEditorSelection, computePasteData } from '../clipboardUtils.js';
|
|
21
21
|
import { AbstractEditContext } from '../editContext.js';
|
|
22
22
|
import { editContextAddDisposableListener, FocusTracker } from './nativeEditContextUtils.js';
|
|
23
23
|
import { ScreenReaderSupport } from './screenReaderSupport.js';
|
|
@@ -30,8 +30,7 @@ import { NativeEditContextRegistry } from './nativeEditContextRegistry.js';
|
|
|
30
30
|
import { isHighSurrogate, isLowSurrogate } from '../../../../../base/common/strings.js';
|
|
31
31
|
import { IME } from '../../../../../base/common/ime.js';
|
|
32
32
|
import { OffsetRange } from '../../../../common/core/ranges/offsetRange.js';
|
|
33
|
-
import { ILogService
|
|
34
|
-
import { generateUuid } from '../../../../../base/common/uuid.js';
|
|
33
|
+
import { ILogService } from '../../../../../platform/log/common/log.js';
|
|
35
34
|
import { inputLatency } from '../../../../../base/browser/performance.js';
|
|
36
35
|
// Corresponds to classes in nativeEditContext.css
|
|
37
36
|
var CompositionClassName;
|
|
@@ -80,14 +79,14 @@ let NativeEditContext = class NativeEditContext extends AbstractEditContext {
|
|
|
80
79
|
this._screenReaderSupport = this._register(instantiationService.createInstance(ScreenReaderSupport, this.domNode, context, this._viewController));
|
|
81
80
|
this._register(addDisposableListener(this.domNode.domNode, 'copy', (e) => {
|
|
82
81
|
this.logService.trace('NativeEditContext#copy');
|
|
83
|
-
this.
|
|
82
|
+
ensureClipboardGetsEditorSelection(e, this._context, this.logService, isFirefox);
|
|
84
83
|
}));
|
|
85
84
|
this._register(addDisposableListener(this.domNode.domNode, 'cut', (e) => {
|
|
86
85
|
this.logService.trace('NativeEditContext#cut');
|
|
87
86
|
// Pretend here we touched the text area, as the `cut` event will most likely
|
|
88
87
|
// result in a `selectionchange` event which we want to ignore
|
|
89
88
|
this._screenReaderSupport.onWillCut();
|
|
90
|
-
this.
|
|
89
|
+
ensureClipboardGetsEditorSelection(e, this._context, this.logService, isFirefox);
|
|
91
90
|
this.logService.trace('NativeEditContext#cut (before viewController.cut)');
|
|
92
91
|
this._viewController.cut();
|
|
93
92
|
}));
|
|
@@ -106,28 +105,12 @@ let NativeEditContext = class NativeEditContext extends AbstractEditContext {
|
|
|
106
105
|
}));
|
|
107
106
|
this._register(addDisposableListener(this.domNode.domNode, 'paste', (e) => {
|
|
108
107
|
this.logService.trace('NativeEditContext#paste');
|
|
109
|
-
e.
|
|
110
|
-
if (!
|
|
108
|
+
const pasteData = computePasteData(e, this._context, this.logService);
|
|
109
|
+
if (!pasteData) {
|
|
111
110
|
return;
|
|
112
111
|
}
|
|
113
|
-
let [text, metadata] = ClipboardEventUtils.getTextData(e.clipboardData);
|
|
114
|
-
this.logService.trace('NativeEditContext#paste with id : ', metadata?.id, ' with text.length: ', text.length);
|
|
115
|
-
if (!text) {
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
metadata = metadata || InMemoryClipboardMetadataManager.INSTANCE.get(text);
|
|
119
|
-
let pasteOnNewLine = false;
|
|
120
|
-
let multicursorText = null;
|
|
121
|
-
let mode = null;
|
|
122
|
-
if (metadata) {
|
|
123
|
-
const options = this._context.configuration.options;
|
|
124
|
-
const emptySelectionClipboard = options.get(45 /* EditorOption.emptySelectionClipboard */);
|
|
125
|
-
pasteOnNewLine = emptySelectionClipboard && !!metadata.isFromEmptySelection;
|
|
126
|
-
multicursorText = typeof metadata.multicursorText !== 'undefined' ? metadata.multicursorText : null;
|
|
127
|
-
mode = metadata.mode;
|
|
128
|
-
}
|
|
129
112
|
this.logService.trace('NativeEditContext#paste (before viewController.paste)');
|
|
130
|
-
this._viewController.paste(text, pasteOnNewLine, multicursorText, mode);
|
|
113
|
+
this._viewController.paste(pasteData.text, pasteData.pasteOnNewLine, pasteData.multicursorText, pasteData.mode);
|
|
131
114
|
}));
|
|
132
115
|
// Edit context events
|
|
133
116
|
this._register(editContextAddDisposableListener(this._editContext, 'textformatupdate', (e) => this._handleTextFormatUpdate(e)));
|
|
@@ -488,33 +471,6 @@ let NativeEditContext = class NativeEditContext extends AbstractEditContext {
|
|
|
488
471
|
}
|
|
489
472
|
this._editContext.updateCharacterBounds(e.rangeStart, characterBounds);
|
|
490
473
|
}
|
|
491
|
-
_ensureClipboardGetsEditorSelection(e) {
|
|
492
|
-
const options = this._context.configuration.options;
|
|
493
|
-
const emptySelectionClipboard = options.get(45 /* EditorOption.emptySelectionClipboard */);
|
|
494
|
-
const copyWithSyntaxHighlighting = options.get(31 /* EditorOption.copyWithSyntaxHighlighting */);
|
|
495
|
-
const selections = this._context.viewModel.getCursorStates().map(cursorState => cursorState.modelState.selection);
|
|
496
|
-
const dataToCopy = getDataToCopy(this._context.viewModel, selections, emptySelectionClipboard, copyWithSyntaxHighlighting);
|
|
497
|
-
let id = undefined;
|
|
498
|
-
if (this.logService.getLevel() === LogLevel.Trace) {
|
|
499
|
-
id = generateUuid();
|
|
500
|
-
}
|
|
501
|
-
const storedMetadata = {
|
|
502
|
-
version: 1,
|
|
503
|
-
id,
|
|
504
|
-
isFromEmptySelection: dataToCopy.isFromEmptySelection,
|
|
505
|
-
multicursorText: dataToCopy.multicursorText,
|
|
506
|
-
mode: dataToCopy.mode
|
|
507
|
-
};
|
|
508
|
-
InMemoryClipboardMetadataManager.INSTANCE.set(
|
|
509
|
-
// When writing "LINE\r\n" to the clipboard and then pasting,
|
|
510
|
-
// Firefox pastes "LINE\n", so let's work around this quirk
|
|
511
|
-
(isFirefox ? dataToCopy.text.replace(/\r\n/g, '\n') : dataToCopy.text), storedMetadata);
|
|
512
|
-
e.preventDefault();
|
|
513
|
-
if (e.clipboardData) {
|
|
514
|
-
ClipboardEventUtils.setTextData(e.clipboardData, dataToCopy.text, dataToCopy.html, storedMetadata);
|
|
515
|
-
}
|
|
516
|
-
this.logService.trace('NativeEditContext#_ensureClipboardGetsEditorSelectios with id : ', id, ' with text.length: ', dataToCopy.text.length);
|
|
517
|
-
}
|
|
518
474
|
};
|
|
519
475
|
NativeEditContext = __decorate([
|
|
520
476
|
__param(5, IInstantiationService),
|