mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Prometheus: Changes brace-insertion behavior to be less annoying (#18698)
* Changes brace-insertion behavior to be less annoying
* Removes use of braces plugin
* Revert "Removes use of braces plugin"
This reverts commit 4cf4a6073b
.
This commit is contained in:
parent
90508cdbf2
commit
3aa3a45372
@ -19,42 +19,6 @@ describe('braces', () => {
|
|||||||
expect(Plain.serialize(change.value)).toEqual('()');
|
expect(Plain.serialize(change.value)).toEqual('()');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('adds closing braces around a value', () => {
|
|
||||||
const change = Plain.deserialize('foo').change();
|
|
||||||
const event = new window.KeyboardEvent('keydown', { key: '(' });
|
|
||||||
handler(event, change);
|
|
||||||
expect(Plain.serialize(change.value)).toEqual('(foo)');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('adds closing braces around the following value only', () => {
|
|
||||||
const change = Plain.deserialize('foo bar ugh').change();
|
|
||||||
let event;
|
|
||||||
event = new window.KeyboardEvent('keydown', { key: '(' });
|
|
||||||
handler(event, change);
|
|
||||||
expect(Plain.serialize(change.value)).toEqual('(foo) bar ugh');
|
|
||||||
|
|
||||||
// Wrap bar
|
|
||||||
change.move(5);
|
|
||||||
event = new window.KeyboardEvent('keydown', { key: '(' });
|
|
||||||
handler(event, change);
|
|
||||||
expect(Plain.serialize(change.value)).toEqual('(foo) (bar) ugh');
|
|
||||||
|
|
||||||
// Create empty parens after (bar)
|
|
||||||
change.move(4);
|
|
||||||
event = new window.KeyboardEvent('keydown', { key: '(' });
|
|
||||||
handler(event, change);
|
|
||||||
expect(Plain.serialize(change.value)).toEqual('(foo) (bar)() ugh');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('adds closing braces outside a selector', () => {
|
|
||||||
const change = Plain.deserialize('sumrate(metric{namespace="dev", cluster="c1"}[2m])').change();
|
|
||||||
let event;
|
|
||||||
change.move(3);
|
|
||||||
event = new window.KeyboardEvent('keydown', { key: '(' });
|
|
||||||
handler(event, change);
|
|
||||||
expect(Plain.serialize(change.value)).toEqual('sum(rate(metric{namespace="dev", cluster="c1"}[2m]))');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('removes closing brace when opening brace is removed', () => {
|
it('removes closing brace when opening brace is removed', () => {
|
||||||
const change = Plain.deserialize('time()').change();
|
const change = Plain.deserialize('time()').change();
|
||||||
let event;
|
let event;
|
||||||
|
@ -1,45 +1,42 @@
|
|||||||
|
// @ts-ignore
|
||||||
|
import { Change } from 'slate';
|
||||||
|
|
||||||
const BRACES: any = {
|
const BRACES: any = {
|
||||||
'[': ']',
|
'[': ']',
|
||||||
'{': '}',
|
'{': '}',
|
||||||
'(': ')',
|
'(': ')',
|
||||||
};
|
};
|
||||||
|
|
||||||
const NON_SELECTOR_SPACE_REGEXP = / (?![^}]+})/;
|
|
||||||
|
|
||||||
export default function BracesPlugin() {
|
export default function BracesPlugin() {
|
||||||
return {
|
return {
|
||||||
onKeyDown(event: any, change: { value?: any; insertText?: any; deleteBackward?: any }) {
|
onKeyDown(event: KeyboardEvent, change: Change) {
|
||||||
const { value } = change;
|
const { value } = change;
|
||||||
if (!value.isCollapsed) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (event.key) {
|
switch (event.key) {
|
||||||
|
case '(':
|
||||||
case '{':
|
case '{':
|
||||||
case '[': {
|
case '[': {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
// Insert matching braces
|
|
||||||
change
|
|
||||||
.insertText(`${event.key}${BRACES[event.key]}`)
|
|
||||||
.move(-1)
|
|
||||||
.focus();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case '(': {
|
const { startOffset, startKey, endOffset, endKey, focusOffset } = value.selection;
|
||||||
event.preventDefault();
|
const text: string = value.focusText.text;
|
||||||
const text = value.anchorText.text;
|
|
||||||
const offset = value.anchorOffset;
|
// If text is selected, wrap selected text in parens
|
||||||
const delimiterIndex = text.slice(offset).search(NON_SELECTOR_SPACE_REGEXP);
|
if (value.isExpanded) {
|
||||||
const length = delimiterIndex > -1 ? delimiterIndex + offset : text.length;
|
change
|
||||||
const forward = length - offset;
|
.insertTextByKey(startKey, startOffset, event.key)
|
||||||
// Insert matching braces
|
.insertTextByKey(endKey, endOffset + 1, BRACES[event.key])
|
||||||
change
|
.moveEnd(-1);
|
||||||
.insertText(event.key)
|
} else if (
|
||||||
.move(forward)
|
focusOffset === text.length ||
|
||||||
.insertText(BRACES[event.key])
|
text[focusOffset] === ' ' ||
|
||||||
.move(-1 - forward)
|
Object.values(BRACES).includes(text[focusOffset])
|
||||||
.focus();
|
) {
|
||||||
|
change.insertText(`${event.key}${BRACES[event.key]}`).move(-1);
|
||||||
|
} else {
|
||||||
|
change.insertText(event.key);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user