aboutsummaryrefslogblamecommitdiff
path: root/src/shared/settings/Properties.ts
blob: cf10d616297473acefb8c9f5088fe9f91cb98c55 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12










                              
                                                              



                                          
                                        


                             






                                                  
                        






                                                        

                       
                                          
                      
                  















                                 
           



                                                                   
                                                     


                                 

                              


                                                     
                                             












                                      
export type PropertiesJSON = {
  hintchars?: string;
  smoothscroll?: boolean;
  complete?: string;
};

export type PropertyTypes = {
  hintchars: string;
  smoothscroll: string;
  complete: string;
};

type PropertyName = "hintchars" | "smoothscroll" | "complete";

type PropertyDef = {
  name: PropertyName;
  description: string;
  defaultValue: string | number | boolean;
  type: "string" | "number" | "boolean";
};

const defs: PropertyDef[] = [
  {
    name: "hintchars",
    description: "hint characters on follow mode",
    defaultValue: "abcdefghijklmnopqrstuvwxyz",
    type: "string",
  },
  {
    name: "smoothscroll",
    description: "smooth scroll",
    defaultValue: false,
    type: "boolean",
  },
  {
    name: "complete",
    description: "which are completed at the open page",
    defaultValue: "sbh",
    type: "string",
  },
];

const defaultValues = {
  hintchars: "abcdefghijklmnopqrstuvwxyz",
  smoothscroll: false,
  complete: "sbh",
};

export default class Properties {
  public hintchars: string;

  public smoothscroll: boolean;

  public complete: string;

  constructor({
    hintchars,
    smoothscroll,
    complete,
  }: {
    hintchars?: string;
    smoothscroll?: boolean;
    complete?: string;
  } = {}) {
    this.hintchars = hintchars || defaultValues.hintchars;
    this.smoothscroll = smoothscroll || defaultValues.smoothscroll;
    this.complete = complete || defaultValues.complete;
  }

  static fromJSON(json: PropertiesJSON): Properties {
    return new Properties(json);
  }

  static types(): PropertyTypes {
    return {
      hintchars: "string",
      smoothscroll: "boolean",
      complete: "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,
    };
  }
}