aboutsummaryrefslogtreecommitdiff
path: root/src/shared/settings/Properties.ts
blob: 7540c8a1acab9ba9259ffccd51d256c64e8c9841 (plain) (blame)
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,
    };
  }
}