mirror of
https://github.com/pelican-dev/panel.git
synced 2025-05-20 06:24:44 +02:00

Known issues... Changing themes does not reload editor, F5 required. Editing a variable/docker images clears code box render, not sure how to fix this? reload on view?
115 lines
4.9 KiB
PHP
115 lines
4.9 KiB
PHP
<x-dynamic-component :component="$getFieldWrapperView()" :field="$field" class="overflow-hidden">
|
|
|
|
<div x-data="{
|
|
monacoContent: $wire.$entangle('{{ $getStatePath() }}'),
|
|
previewContent: '',
|
|
fullScreenModeEnabled: false,
|
|
showPreview: false,
|
|
monacoLanguage: '{{ $getLanguage() }}',
|
|
monacoPlaceholder: {{ (int) $getShowPlaceholder() }},
|
|
monacoPlaceholderText: '{{ $getPlaceholderText() }}',
|
|
monacoLoader: {{ (int) $getShowLoader() }},
|
|
monacoFontSize: '{{ $getFontSize() }}',
|
|
lineNumbersMinChars: {{ $getLineNumbersMinChars() }},
|
|
automaticLayout: {{ (int) $getAutomaticLayout() }},
|
|
monacoId: $id('monaco-editor'),
|
|
|
|
monacoEditor(editor){
|
|
editor.onDidChangeModelContent((e) => {
|
|
this.monacoContent = editor.getValue();
|
|
this.updatePlaceholder(editor.getValue());
|
|
});
|
|
|
|
editor.onDidBlurEditorWidget(() => {
|
|
this.updatePlaceholder(editor.getValue());
|
|
});
|
|
|
|
editor.onDidFocusEditorWidget(() => {
|
|
this.updatePlaceholder(editor.getValue());
|
|
});
|
|
},
|
|
|
|
updatePlaceholder: function(value) {
|
|
if (value == '') {
|
|
this.monacoPlaceholder = true;
|
|
return;
|
|
}
|
|
this.monacoPlaceholder = false;
|
|
},
|
|
|
|
monacoEditorFocus(){
|
|
document.getElementById(this.monacoId).dispatchEvent(
|
|
new CustomEvent('monaco-editor-focused', { monacoId: this.monacoId })
|
|
);
|
|
},
|
|
|
|
monacoEditorAddLoaderScriptToHead() {
|
|
script = document.createElement('script');
|
|
script.src = 'https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.39.0/min/vs/loader.min.js';
|
|
document.head.appendChild(script);
|
|
},
|
|
|
|
}" x-init="
|
|
$el.style.height = '500px';
|
|
$watch('fullScreenModeEnabled', value => {
|
|
if (value) {
|
|
$el.style.height = '100vh';
|
|
} else {
|
|
$el.style.height = '500px';
|
|
}
|
|
});
|
|
|
|
if(typeof _amdLoaderGlobal == 'undefined'){
|
|
monacoEditorAddLoaderScriptToHead();
|
|
}
|
|
|
|
monacoLoaderInterval = setInterval(() => {
|
|
if(typeof _amdLoaderGlobal !== 'undefined'){
|
|
|
|
// Based on https://jsfiddle.net/developit/bwgkr6uq/ which works without needing service worker. Provided by loader.min.js.
|
|
require.config({ paths: { 'vs': 'https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.39.0/min/vs' }});
|
|
let proxy = URL.createObjectURL(new Blob([` self.MonacoEnvironment = { baseUrl: 'https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.39.0/min' }; importScripts('https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.39.0/min/vs/base/worker/workerMain.min.js');`], { type: 'text/javascript' }));
|
|
window.MonacoEnvironment = { getWorkerUrl: () => proxy };
|
|
|
|
require(['vs/editor/editor.main'], () => {
|
|
|
|
monaco.editor.defineTheme('custom', {{ $editorTheme() }});
|
|
document.getElementById(monacoId).editor = monaco.editor.create($refs.monacoEditorElement, {
|
|
value: monacoContent,
|
|
theme: localStorage.getItem('theme') === 'light' ? 'iPlastic' : 'custom',
|
|
fontSize: monacoFontSize,
|
|
lineNumbersMinChars: lineNumbersMinChars,
|
|
automaticLayout: automaticLayout,
|
|
language: monacoLanguage,
|
|
scrollbar: {
|
|
horizontal: 'auto',
|
|
horizontalScrollbarSize: 15
|
|
},
|
|
|
|
});
|
|
monacoEditor(document.getElementById(monacoId).editor);
|
|
document.getElementById(monacoId).addEventListener('monaco-editor-focused', (event) => {
|
|
document.getElementById(monacoId).editor.focus();
|
|
});
|
|
updatePlaceholder(document.getElementById(monacoId).editor.getValue());
|
|
});
|
|
|
|
clearInterval(monacoLoaderInterval);
|
|
monacoLoader = false;
|
|
}
|
|
}, 5); " :id="monacoId"
|
|
class="fme-wrapper"
|
|
:class="{ 'fme-full-screen': fullScreenModeEnabled }" x-cloak>
|
|
<div class="h-full w-full">
|
|
<div class="fme-container" style="padding-top: 0">
|
|
<!-- Editor -->
|
|
<div x-show="!monacoLoader" class="fme-element-wrapper">
|
|
<div x-ref="monacoEditorElement" class="fme-element"></div>
|
|
<div x-ref="monacoPlaceholderElement" x-show="monacoPlaceholder" @click="monacoEditorFocus()" :style="'font-size: ' + monacoFontSize" class="fme-placeholder" x-text="monacoPlaceholderText"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</x-dynamic-component>
|