mirror of https://github.com/nocodb/nocodb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.4 KiB
54 lines
1.4 KiB
3 months ago
|
import { editor } from 'monaco-editor'
|
||
|
|
||
|
export default class PlaceholderContentWidget implements editor.IEditorContribution {
|
||
|
static ID = 'editor.widget.placeholderHint'
|
||
|
|
||
|
protected placeholder: string
|
||
|
protected editor: editor.ICodeEditor
|
||
|
protected domNode: HTMLElement | null = null
|
||
|
|
||
|
constructor(placeholder: string, editor: editor.ICodeEditor) {
|
||
|
this.placeholder = placeholder
|
||
|
this.editor = editor
|
||
|
// register a listener for editor code changes
|
||
|
editor.onDidChangeModelContent(() => this.onDidChangeModelContent())
|
||
|
// ensure that on initial load the placeholder is shown
|
||
|
this.onDidChangeModelContent()
|
||
|
}
|
||
|
|
||
|
onDidChangeModelContent() {
|
||
|
if (this.editor.getValue() === '') {
|
||
|
this.editor.addContentWidget(this)
|
||
|
} else {
|
||
|
this.editor.removeContentWidget(this)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
getId() {
|
||
|
return PlaceholderContentWidget.ID
|
||
|
}
|
||
|
|
||
|
getDomNode() {
|
||
|
if (!this.domNode) {
|
||
|
this.domNode = document.createElement('div')
|
||
|
this.domNode.classList.add('formula-placeholder')
|
||
|
this.domNode.style.width = 'max-content'
|
||
|
this.domNode.textContent = this.placeholder
|
||
|
this.editor.applyFontInfo(this.domNode)
|
||
|
}
|
||
|
|
||
|
return this.domNode
|
||
|
}
|
||
|
|
||
|
getPosition() {
|
||
|
return {
|
||
|
position: { lineNumber: 1, column: 1 },
|
||
|
preference: [editor.ContentWidgetPositionPreference.EXACT],
|
||
|
}
|
||
|
}
|
||
|
|
||
|
dispose() {
|
||
|
this.editor.removeContentWidget(this)
|
||
|
}
|
||
|
}
|