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