monaco-editor-core
Version:
A browser based code editor
128 lines (127 loc) • 5.11 kB
JavaScript
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;
}
}