You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
 
 
 

96 lines
1.9 KiB

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,
};
}
}