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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
import ColorScheme from "../ColorScheme";
export type PropertiesJSON = {
hintchars?: string;
smoothscroll?: boolean;
complete?: string;
colorscheme?: ColorScheme;
};
export type PropertyTypes = {
hintchars: string;
smoothscroll: string;
complete: string;
colorscheme: string;
};
type PropertyName = "hintchars" | "smoothscroll" | "complete" | "colorscheme";
type PropertyDef = {
name: PropertyName;
defaultValue: string | number | boolean;
type: "string" | "number" | "boolean";
};
const defs: PropertyDef[] = [
{
name: "hintchars",
defaultValue: "abcdefghijklmnopqrstuvwxyz",
type: "string",
},
{
name: "smoothscroll",
defaultValue: false,
type: "boolean",
},
{
name: "complete",
defaultValue: "sbh",
type: "string",
},
{
name: "colorscheme",
defaultValue: ColorScheme.System,
type: "string",
},
];
const defaultValues = {
hintchars: "abcdefghijklmnopqrstuvwxyz",
smoothscroll: false,
complete: "sbh",
colorscheme: ColorScheme.System,
};
export default class Properties {
public hintchars: string;
public smoothscroll: boolean;
public complete: string;
public colorscheme: ColorScheme;
constructor({
hintchars,
smoothscroll,
complete,
colorscheme,
}: {
hintchars?: string;
smoothscroll?: boolean;
complete?: string;
colorscheme?: ColorScheme;
} = {}) {
this.hintchars = hintchars || defaultValues.hintchars;
this.smoothscroll = smoothscroll || defaultValues.smoothscroll;
this.complete = complete || defaultValues.complete;
this.colorscheme = colorscheme || defaultValues.colorscheme;
}
static fromJSON(json: PropertiesJSON): Properties {
return new Properties(json);
}
static types(): PropertyTypes {
return {
hintchars: "string",
smoothscroll: "boolean",
complete: "string",
colorscheme: "string",
};
}
static def(name: string): PropertyDef | undefined {
return defs.find((p) => p.name === name);
}
static defs(): PropertyDef[] {
return defs;
}
toJSON(): PropertiesJSON {
return {
hintchars: this.hintchars,
smoothscroll: this.smoothscroll,
complete: this.complete,
colorscheme: this.colorscheme,
};
}
}
|