mirror of
https://github.com/usebruno/bruno.git
synced 2025-06-19 19:28:16 +02:00
chore: moved codemirror autocomplete util to its own file
This commit is contained in:
parent
a0860febee
commit
2ed35108d7
@ -9,40 +9,6 @@ const SERVER_RENDERED = typeof navigator === 'undefined' || global['PREVENT_CODE
|
|||||||
|
|
||||||
if (!SERVER_RENDERED) {
|
if (!SERVER_RENDERED) {
|
||||||
CodeMirror = require('codemirror');
|
CodeMirror = require('codemirror');
|
||||||
CodeMirror.registerHelper('hint', 'anyword', (editor, options) => {
|
|
||||||
const word = /[\w$-]+/;
|
|
||||||
const wordlist = (options && options.autocomplete) || [];
|
|
||||||
let cur = editor.getCursor(),
|
|
||||||
curLine = editor.getLine(cur.line);
|
|
||||||
let end = cur.ch,
|
|
||||||
start = end;
|
|
||||||
while (start && word.test(curLine.charAt(start - 1))) --start;
|
|
||||||
let curWord = start != end && curLine.slice(start, end);
|
|
||||||
|
|
||||||
// Check if curWord is a valid string before proceeding
|
|
||||||
if (typeof curWord !== 'string' || curWord.length < 3) {
|
|
||||||
return null; // Abort the hint
|
|
||||||
}
|
|
||||||
|
|
||||||
const list = (options && options.list) || [];
|
|
||||||
const re = new RegExp(word.source, 'g');
|
|
||||||
for (let dir = -1; dir <= 1; dir += 2) {
|
|
||||||
let line = cur.line,
|
|
||||||
endLine = Math.min(Math.max(line + dir * 500, editor.firstLine()), editor.lastLine()) + dir;
|
|
||||||
for (; line != endLine; line += dir) {
|
|
||||||
let text = editor.getLine(line),
|
|
||||||
m;
|
|
||||||
while ((m = re.exec(text))) {
|
|
||||||
if (line == cur.line && curWord.length < 3) continue;
|
|
||||||
list.push(...wordlist.filter((el) => el.toLowerCase().startsWith(curWord.toLowerCase())));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return { list: [...new Set(list)], from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end) };
|
|
||||||
});
|
|
||||||
CodeMirror.commands.autocomplete = (cm, hint, options) => {
|
|
||||||
cm.showHint({ hint, ...options });
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class MultiLineEditor extends Component {
|
class MultiLineEditor extends Component {
|
||||||
|
@ -7,7 +7,6 @@ import { useTheme } from 'providers/Theme';
|
|||||||
import { addRequestHeader, updateRequestHeader, deleteRequestHeader } from 'providers/ReduxStore/slices/collections';
|
import { addRequestHeader, updateRequestHeader, deleteRequestHeader } from 'providers/ReduxStore/slices/collections';
|
||||||
import { sendRequest, saveRequest } from 'providers/ReduxStore/slices/collections/actions';
|
import { sendRequest, saveRequest } from 'providers/ReduxStore/slices/collections/actions';
|
||||||
import SingleLineEditor from 'components/SingleLineEditor';
|
import SingleLineEditor from 'components/SingleLineEditor';
|
||||||
import MultiLineEditor from 'components/MultiLineEditor';
|
|
||||||
import StyledWrapper from './StyledWrapper';
|
import StyledWrapper from './StyledWrapper';
|
||||||
import { headers as StandardHTTPHeaders } from 'know-your-http-well';
|
import { headers as StandardHTTPHeaders } from 'know-your-http-well';
|
||||||
const headerAutoCompleteList = StandardHTTPHeaders.map((e) => e.header);
|
const headerAutoCompleteList = StandardHTTPHeaders.map((e) => e.header);
|
||||||
@ -100,7 +99,7 @@ const RequestHeaders = ({ item, collection }) => {
|
|||||||
/>
|
/>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<MultiLineEditor
|
<SingleLineEditor
|
||||||
value={header.value}
|
value={header.value}
|
||||||
theme={storedTheme}
|
theme={storedTheme}
|
||||||
onSave={onSave}
|
onSave={onSave}
|
||||||
|
@ -9,40 +9,6 @@ const SERVER_RENDERED = typeof navigator === 'undefined' || global['PREVENT_CODE
|
|||||||
|
|
||||||
if (!SERVER_RENDERED) {
|
if (!SERVER_RENDERED) {
|
||||||
CodeMirror = require('codemirror');
|
CodeMirror = require('codemirror');
|
||||||
CodeMirror.registerHelper('hint', 'anyword', (editor, options) => {
|
|
||||||
const word = /[\w$-]+/;
|
|
||||||
const wordlist = (options && options.autocomplete) || [];
|
|
||||||
let cur = editor.getCursor(),
|
|
||||||
curLine = editor.getLine(cur.line);
|
|
||||||
let end = cur.ch,
|
|
||||||
start = end;
|
|
||||||
while (start && word.test(curLine.charAt(start - 1))) --start;
|
|
||||||
let curWord = start != end && curLine.slice(start, end);
|
|
||||||
|
|
||||||
// Check if curWord is a valid string before proceeding
|
|
||||||
if (typeof curWord !== 'string' || curWord.length < 3) {
|
|
||||||
return null; // Abort the hint
|
|
||||||
}
|
|
||||||
|
|
||||||
const list = (options && options.list) || [];
|
|
||||||
const re = new RegExp(word.source, 'g');
|
|
||||||
for (let dir = -1; dir <= 1; dir += 2) {
|
|
||||||
let line = cur.line,
|
|
||||||
endLine = Math.min(Math.max(line + dir * 500, editor.firstLine()), editor.lastLine()) + dir;
|
|
||||||
for (; line != endLine; line += dir) {
|
|
||||||
let text = editor.getLine(line),
|
|
||||||
m;
|
|
||||||
while ((m = re.exec(text))) {
|
|
||||||
if (line == cur.line && curWord.length < 3) continue;
|
|
||||||
list.push(...wordlist.filter((el) => el.toLowerCase().startsWith(curWord.toLowerCase())));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return { list: [...new Set(list)], from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end) };
|
|
||||||
});
|
|
||||||
CodeMirror.commands.autocomplete = (cm, hint, options) => {
|
|
||||||
cm.showHint({ hint, ...options });
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class SingleLineEditor extends Component {
|
class SingleLineEditor extends Component {
|
||||||
|
@ -41,6 +41,7 @@ if (!SERVER_RENDERED) {
|
|||||||
|
|
||||||
require('utils/codemirror/brunoVarInfo');
|
require('utils/codemirror/brunoVarInfo');
|
||||||
require('utils/codemirror/javascript-lint');
|
require('utils/codemirror/javascript-lint');
|
||||||
|
require('utils/codemirror/autocomplete');
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function Main() {
|
export default function Main() {
|
||||||
|
40
packages/bruno-app/src/utils/codemirror/autocomplete.js
Normal file
40
packages/bruno-app/src/utils/codemirror/autocomplete.js
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
let CodeMirror;
|
||||||
|
const SERVER_RENDERED = typeof navigator === 'undefined' || global['PREVENT_CODEMIRROR_RENDER'] === true;
|
||||||
|
|
||||||
|
if (!SERVER_RENDERED) {
|
||||||
|
CodeMirror = require('codemirror');
|
||||||
|
CodeMirror.registerHelper('hint', 'anyword', (editor, options) => {
|
||||||
|
const word = /[\w$-]+/;
|
||||||
|
const wordlist = (options && options.autocomplete) || [];
|
||||||
|
let cur = editor.getCursor(),
|
||||||
|
curLine = editor.getLine(cur.line);
|
||||||
|
let end = cur.ch,
|
||||||
|
start = end;
|
||||||
|
while (start && word.test(curLine.charAt(start - 1))) --start;
|
||||||
|
let curWord = start != end && curLine.slice(start, end);
|
||||||
|
|
||||||
|
// Check if curWord is a valid string before proceeding
|
||||||
|
if (typeof curWord !== 'string' || curWord.length < 3) {
|
||||||
|
return null; // Abort the hint
|
||||||
|
}
|
||||||
|
|
||||||
|
const list = (options && options.list) || [];
|
||||||
|
const re = new RegExp(word.source, 'g');
|
||||||
|
for (let dir = -1; dir <= 1; dir += 2) {
|
||||||
|
let line = cur.line,
|
||||||
|
endLine = Math.min(Math.max(line + dir * 500, editor.firstLine()), editor.lastLine()) + dir;
|
||||||
|
for (; line != endLine; line += dir) {
|
||||||
|
let text = editor.getLine(line),
|
||||||
|
m;
|
||||||
|
while ((m = re.exec(text))) {
|
||||||
|
if (line == cur.line && curWord.length < 3) continue;
|
||||||
|
list.push(...wordlist.filter((el) => el.toLowerCase().startsWith(curWord.toLowerCase())));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return { list: [...new Set(list)], from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end) };
|
||||||
|
});
|
||||||
|
CodeMirror.commands.autocomplete = (cm, hint, options) => {
|
||||||
|
cm.showHint({ hint, ...options });
|
||||||
|
};
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user