54 lines
1.3 KiB
JavaScript
54 lines
1.3 KiB
JavaScript
export default class DecorationsController {
|
|
constructor(editor) {
|
|
this.editor = editor;
|
|
this.decorations = new Map();
|
|
this.editorDecorations = new Map();
|
|
}
|
|
|
|
getAllDecorationsForModel(model) {
|
|
if (!this.decorations.has(model.url)) return [];
|
|
|
|
const modelDecorations = this.decorations.get(model.url);
|
|
const decorations = [];
|
|
|
|
modelDecorations.forEach(val => decorations.push(...val));
|
|
|
|
return decorations;
|
|
}
|
|
|
|
addDecorations(model, decorationsKey, decorations) {
|
|
const decorationMap = this.decorations.get(model.url) || new Map();
|
|
|
|
decorationMap.set(decorationsKey, decorations);
|
|
|
|
this.decorations.set(model.url, decorationMap);
|
|
|
|
this.decorate(model);
|
|
}
|
|
|
|
decorate(model) {
|
|
if (!this.editor.instance) return;
|
|
|
|
const decorations = this.getAllDecorationsForModel(model);
|
|
const oldDecorations = this.editorDecorations.get(model.url) || [];
|
|
|
|
this.editorDecorations.set(
|
|
model.url,
|
|
this.editor.instance.deltaDecorations(oldDecorations, decorations),
|
|
);
|
|
}
|
|
|
|
hasDecorations(model) {
|
|
return this.decorations.has(model.url);
|
|
}
|
|
|
|
removeDecorations(model) {
|
|
this.decorations.delete(model.url);
|
|
this.editorDecorations.delete(model.url);
|
|
}
|
|
|
|
dispose() {
|
|
this.decorations.clear();
|
|
this.editorDecorations.clear();
|
|
}
|
|
}
|