feat: Nginx configuration supports shortcut commenting. (#10482)

Refs https://github.com/1Panel-dev/1Panel/issues/3606
This commit is contained in:
CityFun 2025-09-25 15:30:08 +08:00 committed by GitHub
parent ac9881dd4c
commit 07d0b37692
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 56 additions and 9 deletions

View file

@ -20,12 +20,12 @@
"prettier": "prettier --write ."
},
"dependencies": {
"@codemirror/lang-html": "^6.4.9",
"@codemirror/lang-json": "^6.0.1",
"@codemirror/lang-php": "^6.0.1",
"@codemirror/language": "^6.10.2",
"@codemirror/legacy-modes": "^6.4.0",
"@codemirror/theme-one-dark": "^6.1.2",
"@codemirror/lang-html": "^6.4.10",
"@codemirror/lang-json": "^6.0.2",
"@codemirror/lang-php": "^6.0.2",
"@codemirror/language": "^6.11.3",
"@codemirror/legacy-modes": "^6.5.1",
"@codemirror/theme-one-dark": "^6.1.3",
"@element-plus/icons-vue": "^1.1.4",
"@highlightjs/vue-plugin": "^2.1.0",
"@vue-office/docx": "^1.6.2",
@ -35,7 +35,7 @@
"@xterm/xterm": "^5.5.0",
"anser": "^2.3.2",
"axios": "^1.7.2",
"codemirror": "^6.0.1",
"codemirror": "^6.0.2",
"crypto-js": "^4.2.0",
"echarts": "^5.5.0",
"element-plus": "^2.11.2",

View file

@ -15,7 +15,7 @@ import { yaml } from '@codemirror/legacy-modes/mode/yaml';
import { shell } from '@codemirror/legacy-modes/mode/shell';
import { dockerFile } from '@codemirror/legacy-modes/mode/dockerfile';
import { javascript } from '@codemirror/legacy-modes/mode/javascript';
import { placeholder } from '@codemirror/view';
import { KeyBinding, placeholder } from '@codemirror/view';
import { json } from '@codemirror/lang-json';
import { keymap } from '@codemirror/view';
import { defaultKeymap, indentWithTab } from '@codemirror/commands';
@ -68,6 +68,49 @@ const customStyle = computed<CSSProperties>(() => ({
width: '100%',
}));
const toggleLineComment = (mode: string) => {
return (view: EditorView) => {
const commentChar =
mode === 'yaml' || mode === 'shell' || mode === 'nginx' || mode === 'dockerfile' ? '#' : '//';
const { state } = view;
const transaction = state.changeByRange((range) => {
let line = state.doc.lineAt(range.from);
let text = line.text;
let changes;
if (text.trim().startsWith(commentChar)) {
const pos = line.from + text.indexOf(commentChar);
changes = { from: pos, to: pos + commentChar.length, insert: '' };
} else {
changes = { from: line.from, insert: commentChar };
}
return {
changes,
range,
};
});
view.dispatch(transaction);
return true;
};
};
const customKeymap: KeyBinding[] = [
{
key: 'Alt-/',
run: toggleLineComment(props.mode),
preventDefault: true,
},
{
key: 'Mod-/',
run: toggleLineComment(props.mode),
preventDefault: true,
},
];
const initCodeMirror = () => {
const defaultTheme = EditorView.theme({
'&.cm-editor': {
@ -80,7 +123,7 @@ const initCodeMirror = () => {
defaultTheme,
oneDark,
basicSetup,
keymap.of([...defaultKeymap, indentWithTab]),
keymap.of([...defaultKeymap, indentWithTab, ...customKeymap]),
EditorView.updateListener.of((v: any) => {
if (v.docChanged) {
emit('update:modelValue', v.state.doc.toString());
@ -89,9 +132,11 @@ const initCodeMirror = () => {
placeholder(props.placeholder),
EditorView.editable.of(!props.disabled),
];
if (props.lineWrapping) {
extensions.push(EditorView.lineWrapping);
}
switch (props.mode) {
case 'dockerfile':
extensions.push(StreamLanguage.define(dockerFile));
@ -112,10 +157,12 @@ const initCodeMirror = () => {
extensions.push(StreamLanguage.define(shell));
break;
}
let startState = EditorState.create({
doc: content.value,
extensions: extensions,
});
editorView.value = new EditorView({
state: startState,
parent: editorRef.value,