UNPKG

monaco-editor-core

Version:

A browser based code editor

128 lines (127 loc) 5.11 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; import { Emitter } from '../../../base/common/event.js'; import { Disposable, toDisposable } from '../../../base/common/lifecycle.js'; import { LinkedList } from '../../../base/common/linkedList.js'; import { IThemeService } from '../../../platform/theme/common/themeService.js'; let AbstractCodeEditorService = class AbstractCodeEditorService extends Disposable { constructor(_themeService) { super(); this._themeService = _themeService; this._onWillCreateCodeEditor = this._register(new Emitter()); this._onCodeEditorAdd = this._register(new Emitter()); this.onCodeEditorAdd = this._onCodeEditorAdd.event; this._onCodeEditorRemove = this._register(new Emitter()); this.onCodeEditorRemove = this._onCodeEditorRemove.event; this._onWillCreateDiffEditor = this._register(new Emitter()); this._onDiffEditorAdd = this._register(new Emitter()); this.onDiffEditorAdd = this._onDiffEditorAdd.event; this._onDiffEditorRemove = this._register(new Emitter()); this.onDiffEditorRemove = this._onDiffEditorRemove.event; this._decorationOptionProviders = new Map(); this._codeEditorOpenHandlers = new LinkedList(); this._modelProperties = new Map(); this._codeEditors = Object.create(null); this._diffEditors = Object.create(null); this._globalStyleSheet = null; } willCreateCodeEditor() { this._onWillCreateCodeEditor.fire(); } addCodeEditor(editor) { this._codeEditors[editor.getId()] = editor; this._onCodeEditorAdd.fire(editor); } removeCodeEditor(editor) { if (delete this._codeEditors[editor.getId()]) { this._onCodeEditorRemove.fire(editor); } } listCodeEditors() { return Object.keys(this._codeEditors).map(id => this._codeEditors[id]); } willCreateDiffEditor() { this._onWillCreateDiffEditor.fire(); } addDiffEditor(editor) { this._diffEditors[editor.getId()] = editor; this._onDiffEditorAdd.fire(editor); } listDiffEditors() { return Object.keys(this._diffEditors).map(id => this._diffEditors[id]); } getFocusedCodeEditor() { let editorWithWidgetFocus = null; const editors = this.listCodeEditors(); for (const editor of editors) { if (editor.hasTextFocus()) { // bingo! return editor; } if (editor.hasWidgetFocus()) { editorWithWidgetFocus = editor; } } return editorWithWidgetFocus; } removeDecorationType(key) { const provider = this._decorationOptionProviders.get(key); if (provider) { provider.refCount--; if (provider.refCount <= 0) { this._decorationOptionProviders.delete(key); provider.dispose(); this.listCodeEditors().forEach((ed) => ed.removeDecorationsByType(key)); } } } setModelProperty(resource, key, value) { const key1 = resource.toString(); let dest; if (this._modelProperties.has(key1)) { dest = this._modelProperties.get(key1); } else { dest = new Map(); this._modelProperties.set(key1, dest); } dest.set(key, value); } getModelProperty(resource, key) { const key1 = resource.toString(); if (this._modelProperties.has(key1)) { const innerMap = this._modelProperties.get(key1); return innerMap.get(key); } return undefined; } async openCodeEditor(input, source, sideBySide) { for (const handler of this._codeEditorOpenHandlers) { const candidate = await handler(input, source, sideBySide); if (candidate !== null) { return candidate; } } return null; } registerCodeEditorOpenHandler(handler) { const rm = this._codeEditorOpenHandlers.unshift(handler); return toDisposable(rm); } }; AbstractCodeEditorService = __decorate([ __param(0, IThemeService) ], AbstractCodeEditorService); export { AbstractCodeEditorService }; export class GlobalStyleSheet { constructor(styleSheet) { this._styleSheet = styleSheet; } }