forked from securingsincity/react-ace
-
Notifications
You must be signed in to change notification settings - Fork 0
/
editorOptions.ts
92 lines (86 loc) · 2.1 KB
/
editorOptions.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import * as AceBuilds from "ace-builds";
type EditorOption =
| "minLines"
| "maxLines"
| "readOnly"
| "highlightActiveLine"
| "tabSize"
| "enableBasicAutocompletion"
| "enableLiveAutocompletion"
| "enableSnippets";
const editorOptions: EditorOption[] = [
"minLines",
"maxLines",
"readOnly",
"highlightActiveLine",
"tabSize",
"enableBasicAutocompletion",
"enableLiveAutocompletion",
"enableSnippets"
];
type EditorEvent =
| "onChange"
| "onFocus"
| "onInput"
| "onBlur"
| "onCopy"
| "onPaste"
| "onSelectionChange"
| "onCursorChange"
| "onScroll"
| "handleOptions"
| "updateRef";
const editorEvents: EditorEvent[] = [
"onChange",
"onFocus",
"onInput",
"onBlur",
"onCopy",
"onPaste",
"onSelectionChange",
"onCursorChange",
"onScroll",
"handleOptions",
"updateRef"
];
// Typescript globals definition to allow us to create a window object during SSR.
declare global {
namespace NodeJS {
// tslint:disable-next-line
interface Global {
window: any;
}
}
}
const getAceInstance = (): typeof AceBuilds => {
let ace;
if (typeof window === "undefined") {
// ace-builds just needs some window object to attach ace to.
// During SSR even just an empty object will work.
global.window = {};
ace = require("ace-builds");
// And it can be discarded immediately afterward to avoid confusing
// other libraries that might detect SSR the same way we did.
delete global.window;
} else if ((window as any).ace) {
// Fallback for ace.require when vanilla ACE is hosted over a CDN
ace = (window as any).ace;
ace.acequire = (window as any).ace.require || (window as any).ace.acequire;
} else {
ace = require("ace-builds");
}
return ace;
};
const debounce = (fn: (...args: any[]) => void, delay: number) => {
let timer: any = null;
// tslint:disable-next-line
return function () {
const context = this;
const args = arguments;
clearTimeout(timer);
timer = setTimeout(() => {
fn.apply(context, args);
}, delay);
};
};
export { editorOptions, editorEvents, debounce, getAceInstance };