From bdd3c11f1a2b9e74ed9d21760cfbd9b20dfdb8e2 Mon Sep 17 00:00:00 2001 From: Jake Archibald Date: Tue, 6 Nov 2018 13:36:23 +0000 Subject: [PATCH] Options ui (#222) * wip * Commenting stuff to keep the build happy * Revealing sections * Custom select elements & more form work * Range input styles * Text fields with inputs do the right thing * Safari & Firefox fixes * Large compress select * oops * MozJPEG options updated * OptPNG options * These asserts weren't true * Generic options * WebP options * Hiding "edit" when "original image" * Download icon * Copy setting button - still not happy with this * Progress indicator * Loading icon enter/exit anim * Preventing controls going under options * Ahh so that's what was causing scrolling * Ahh so that's what was causing outlines * Simplifying range styles and fixing cross-browser * Processing custom element styles * Get precision from step by default * I don't know how or when this happened. * Don't need that many steps * Avoid having an element that covers the pinch zoom * Preventing overlap with zoom controls * Prevent ts warning * Fixing spinner position * Simplifying FileSize --- src/codecs/browser-jpeg/encoder-meta.ts | 2 +- src/codecs/browser-jpeg/options.ts | 2 +- src/codecs/browser-webp/encoder-meta.ts | 2 +- src/codecs/browser-webp/options.ts | 2 +- src/codecs/generic/quality-option.tsx | 20 +- src/codecs/imagequant/options.tsx | 81 ++-- src/codecs/mozjpeg/options.tsx | 297 +++++++----- src/codecs/optipng/options.tsx | 20 +- src/codecs/processor.ts | 11 +- src/codecs/resize/options.tsx | 97 ++-- src/codecs/webp/options.tsx | 456 ++++++++++-------- src/codecs/webp/styles.scss | 3 - src/components/App/style.scss | 4 - src/components/FileSize.tsx | 87 ---- src/components/Options/FileSize.tsx | 41 ++ src/components/Options/index.tsx | 201 ++++---- src/components/Options/style.scss | 349 ++++++-------- .../Output/custom-els/TwoUp/styles.css | 2 +- src/components/Output/style.scss | 6 +- src/components/checkbox/index.tsx | 20 + src/components/checkbox/style.scss | 22 + src/components/compress/index.tsx | 49 +- src/components/compress/style.scss | 21 +- src/components/expander/index.tsx | 92 ++++ src/components/expander/style.scss | 9 + src/components/range/index.tsx | 55 +++ src/components/range/style.scss | 55 +++ src/components/select/index.tsx | 20 + src/components/select/style.scss | 33 ++ src/custom-els/RangeInput/index.ts | 46 +- src/custom-els/RangeInput/missing-types.d.ts | 6 +- src/custom-els/RangeInput/styles.css | 80 +-- src/lib/icons.tsx | 14 +- src/lib/util.ts | 23 +- src/style/index.scss | 4 - src/style/reset.scss | 4 - webpack.config.js | 3 +- 37 files changed, 1291 insertions(+), 948 deletions(-) delete mode 100644 src/codecs/webp/styles.scss delete mode 100644 src/components/FileSize.tsx create mode 100644 src/components/Options/FileSize.tsx create mode 100644 src/components/checkbox/index.tsx create mode 100644 src/components/checkbox/style.scss create mode 100644 src/components/expander/index.tsx create mode 100644 src/components/expander/style.scss create mode 100644 src/components/range/index.tsx create mode 100644 src/components/range/style.scss create mode 100644 src/components/select/index.tsx create mode 100644 src/components/select/style.scss diff --git a/src/codecs/browser-jpeg/encoder-meta.ts b/src/codecs/browser-jpeg/encoder-meta.ts index 0d43204e..ae47407a 100644 --- a/src/codecs/browser-jpeg/encoder-meta.ts +++ b/src/codecs/browser-jpeg/encoder-meta.ts @@ -5,4 +5,4 @@ export const type = 'browser-jpeg'; export const label = 'Browser JPEG'; export const mimeType = 'image/jpeg'; export const extension = 'jpg'; -export const defaultOptions: EncodeOptions = { quality: 0.5 }; +export const defaultOptions: EncodeOptions = { quality: 0.75 }; diff --git a/src/codecs/browser-jpeg/options.ts b/src/codecs/browser-jpeg/options.ts index 678e5a9e..61a7817c 100644 --- a/src/codecs/browser-jpeg/options.ts +++ b/src/codecs/browser-jpeg/options.ts @@ -1,3 +1,3 @@ import qualityOption from '../generic/quality-option'; -export default qualityOption({ min: 0, max: 1, step: 0 }); +export default qualityOption({ min: 0, max: 1, step: 0.01 }); diff --git a/src/codecs/browser-webp/encoder-meta.ts b/src/codecs/browser-webp/encoder-meta.ts index d7780687..03971198 100644 --- a/src/codecs/browser-webp/encoder-meta.ts +++ b/src/codecs/browser-webp/encoder-meta.ts @@ -7,5 +7,5 @@ export const type = 'browser-webp'; export const label = 'Browser WebP'; export const mimeType = 'image/webp'; export const extension = 'webp'; -export const defaultOptions: EncodeOptions = { quality: 0.5 }; +export const defaultOptions: EncodeOptions = { quality: 0.75 }; export const featureTest = () => canvasEncodeTest(mimeType); diff --git a/src/codecs/browser-webp/options.ts b/src/codecs/browser-webp/options.ts index 678e5a9e..61a7817c 100644 --- a/src/codecs/browser-webp/options.ts +++ b/src/codecs/browser-webp/options.ts @@ -1,3 +1,3 @@ import qualityOption from '../generic/quality-option'; -export default qualityOption({ min: 0, max: 1, step: 0 }); +export default qualityOption({ min: 0, max: 1, step: 0.01 }); diff --git a/src/codecs/generic/quality-option.tsx b/src/codecs/generic/quality-option.tsx index 373bc2a2..ae124947 100644 --- a/src/codecs/generic/quality-option.tsx +++ b/src/codecs/generic/quality-option.tsx @@ -1,6 +1,7 @@ import { h, Component } from 'preact'; import { bind } from '../../lib/initial-util'; -import '../../custom-els/RangeInput'; +import * as style from '../../components/Options/style.scss'; +import Range from '../../components/range'; interface EncodeOptions { quality: number; @@ -33,18 +34,19 @@ export default function qualityOption(opts: QualityOptionArg = {}) { render({ options }: Props) { return ( -
-
); } diff --git a/src/codecs/imagequant/options.tsx b/src/codecs/imagequant/options.tsx index 82eb82bd..875c3e9b 100644 --- a/src/codecs/imagequant/options.tsx +++ b/src/codecs/imagequant/options.tsx @@ -2,6 +2,10 @@ import { h, Component } from 'preact'; import { bind } from '../../lib/initial-util'; import { inputFieldValueAsNumber, konami } from '../../lib/util'; import { QuantizeOptions } from './processor-meta'; +import * as style from '../../components/Options/style.scss'; +import Expander from '../../components/expander'; +import Select from '../../components/select'; +import Range from '../../components/range'; const konamiPromise = konami(); @@ -26,50 +30,61 @@ 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: inputFieldValueAsNumber(form.zx), - maxNumColors: inputFieldValueAsNumber(form.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) { return ( -
- - -