diff --git a/src/codecs/imagequant/options.tsx b/src/codecs/imagequant/options.tsx index d9dc8128..d5bd6cfc 100644 --- a/src/codecs/imagequant/options.tsx +++ b/src/codecs/imagequant/options.tsx @@ -30,15 +30,14 @@ export default class QuantizerOptions extends Component { @bind onChange(event: Event) { const form = (event.currentTarget as HTMLInputElement).closest('form') as HTMLFormElement; + const { options } = this.props; - const options: QuantizeOptions = { - zx: form.zx ? inputFieldValueAsNumber(form.zx) : this.props.options.zx, - maxNumColors: form.maxNumColors - ? inputFieldValueAsNumber(form.maxNumColors) - : this.props.options.maxNumColors, + const newOptions: QuantizeOptions = { + zx: inputFieldValueAsNumber(form.zx, options.zx), + maxNumColors: inputFieldValueAsNumber(form.maxNumColors, options.maxNumColors), dither: inputFieldValueAsNumber(form.dither), }; - this.props.onChange(options); + this.props.onChange(newOptions); } render({ options }: Props, { extendedSettings }: State) { diff --git a/src/codecs/mozjpeg/options.tsx b/src/codecs/mozjpeg/options.tsx index 84b86ec5..31602ccb 100644 --- a/src/codecs/mozjpeg/options.tsx +++ b/src/codecs/mozjpeg/options.tsx @@ -2,158 +2,197 @@ import { h, Component } from 'preact'; import { bind } from '../../lib/initial-util'; import { inputFieldChecked, inputFieldValueAsNumber } from '../../lib/util'; import { EncodeOptions, MozJpegColorSpace } from './encoder-meta'; -import '../../custom-els/RangeInput'; +import * as style from '../../components/options/style.scss'; +import Checkbox from '../../components/checkbox'; +import Expander from '../../components/expander'; +import Select from '../../components/select'; +import Range from '../../components/range'; +import linkState from 'linkstate'; -type Props = { - options: EncodeOptions, - onChange(newOptions: EncodeOptions): void, -}; +interface Props { + options: EncodeOptions; + onChange(newOptions: EncodeOptions): void; +} + +interface State { + showAdvanced: boolean; +} + +export default class MozJPEGEncoderOptions extends Component { + state: State = { + showAdvanced: false, + }; -export default class MozJPEGEncoderOptions extends Component { @bind onChange(event: Event) { const form = (event.currentTarget as HTMLInputElement).closest('form') as HTMLFormElement; + const { options } = this.props; - const options: EncodeOptions = { + const newOptions: EncodeOptions = { // Copy over options the form doesn't currently care about, eg arithmetic ...this.props.options, // And now stuff from the form: // .checked - baseline: inputFieldChecked(form.baseline), - progressive: inputFieldChecked(form.progressive), - optimize_coding: inputFieldChecked(form.optimize_coding), - trellis_multipass: inputFieldChecked(form.trellis_multipass), - trellis_opt_zero: inputFieldChecked(form.trellis_opt_zero), - trellis_opt_table: inputFieldChecked(form.trellis_opt_table), + baseline: inputFieldChecked(form.baseline, options.baseline), + progressive: inputFieldChecked(form.progressive, options.progressive), + optimize_coding: inputFieldChecked(form.optimize_coding, options.optimize_coding), + trellis_multipass: inputFieldChecked(form.trellis_multipass, options.trellis_multipass), + trellis_opt_zero: inputFieldChecked(form.trellis_opt_zero, options.trellis_opt_zero), + trellis_opt_table: inputFieldChecked(form.trellis_opt_table, options.trellis_opt_table), // .value - quality: inputFieldValueAsNumber(form.quality), - smoothing: inputFieldValueAsNumber(form.smoothing), - color_space: inputFieldValueAsNumber(form.color_space), - quant_table: inputFieldValueAsNumber(form.quant_table), - trellis_loops: inputFieldValueAsNumber(form.trellis_loops), + quality: inputFieldValueAsNumber(form.quality, options.quality), + smoothing: inputFieldValueAsNumber(form.smoothing, options.smoothing), + color_space: inputFieldValueAsNumber(form.color_space, options.color_space), + quant_table: inputFieldValueAsNumber(form.quant_table, options.quant_table), + trellis_loops: inputFieldValueAsNumber(form.trellis_loops, options.trellis_loops), }; - this.props.onChange(options); + this.props.onChange(newOptions); } - render({ options }: Props) { + render({ options }: Props, { showAdvanced }: State) { // I'm rendering both lossy and lossless forms, as it becomes much easier when // gathering the data. return ( -
-