From 860a1fa52e9c1c59434c2655a5094a5ab4ed08b1 Mon Sep 17 00:00:00 2001 From: David Sehnal <david.sehnal@gmail.com> Date: Fri, 16 Nov 2018 00:41:15 +0100 Subject: [PATCH] do not include optional params in default values; interval range support --- src/mol-util/param-definition.ts | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/mol-util/param-definition.ts b/src/mol-util/param-definition.ts index 0a8fbe577..569699bf5 100644 --- a/src/mol-util/param-definition.ts +++ b/src/mol-util/param-definition.ts @@ -75,8 +75,7 @@ export namespace ParamDefinition { return setInfo<Color>({ type: 'color', defaultValue }, info) } - export interface Numeric extends Base<number> { - type: 'number' + export interface Range { /** If given treat as a range. */ min?: number /** If given treat as a range. */ @@ -87,10 +86,7 @@ export namespace ParamDefinition { */ step?: number } - export function Numeric(defaultValue: number, range?: { min?: number, max?: number, step?: number }, info?: Info): Numeric { - return setInfo<Numeric>(setRange({ type: 'number', defaultValue }, range), info) - } - function setRange(p: Numeric, range?: { min?: number, max?: number, step?: number }) { + function setRange<T extends Numeric | Interval>(p: T, range?: { min?: number, max?: number, step?: number }) { if (!range) return p; if (typeof range.min !== 'undefined') p.min = range.min; if (typeof range.max !== 'undefined') p.max = range.max; @@ -98,11 +94,18 @@ export namespace ParamDefinition { return p; } - export interface Interval extends Base<[number, number]> { + export interface Numeric extends Base<number>, Range { + type: 'number' + } + export function Numeric(defaultValue: number, range?: { min?: number, max?: number, step?: number }, info?: Info): Numeric { + return setInfo<Numeric>(setRange({ type: 'number', defaultValue }, range), info) + } + + export interface Interval extends Base<[number, number]>, Range { type: 'interval' } - export function Interval(defaultValue: [number, number], info?: Info): Interval { - return setInfo<Interval>({ type: 'interval', defaultValue }, info) + export function Interval(defaultValue: [number, number], range?: { min?: number, max?: number, step?: number }, info?: Info): Interval { + return setInfo<Interval>(setRange({ type: 'interval', defaultValue }, range), info) } export interface LineGraph extends Base<Vec2[]> { @@ -151,8 +154,11 @@ export namespace ParamDefinition { export function getDefaultValues<T extends Params>(params: T) { const d: { [k: string]: any } = {} - Object.keys(params).forEach(k => d[k] = params[k].defaultValue) - return d as Values<T> + for (const k of Object.keys(params)) { + if (params[k].isOptional) continue; + d[k] = params[k].defaultValue; + } + return d as Values<T>; } export function getLabels<T extends Params>(params: T) { -- GitLab