From c2a819d696727f2ea7d76829ed3b2960e186eba9 Mon Sep 17 00:00:00 2001 From: Ryan Welcher Date: Wed, 7 Oct 2026 13:13:17 -0400 Subject: [PATCH] Make the folder fields a button, so Chromium draws none of their text MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The create-site dialog's Location and the settings' New sites go here were a file input, whose button and "No file chosen" Chromium draws in its own language, not the one chosen in the settings, and reports to screen readers as the input's value. They are now a button saying "Choose folder…", named by the field and that text, and described by the folder it holds. Dropping a folder on the input was the one thing it added, and #228 closed that route as unsupported, so its handler and directoryFromFileEntry go too. Fixes #655. --- docs/public/screenshots/create-site-modal.png | Bin 41611 -> 40731 bytes .../components/create-site-dialog.jsx | 17 ------ src/renderer/components/folder-field.jsx | 47 +++++++--------- src/renderer/shell.css | 17 ++---- src/renderer/site-folder.cjs | 50 ++---------------- tests/e2e/journeys/create-site.spec.js | 7 ++- tests/e2e/journeys/i18n.spec.js | 5 ++ tests/e2e/journeys/settings.spec.js | 4 +- tests/e2e/real-setup/create-site.spec.js | 2 +- tests/unit/site-folder.test.cjs | 36 ------------- 10 files changed, 39 insertions(+), 146 deletions(-) diff --git a/docs/public/screenshots/create-site-modal.png b/docs/public/screenshots/create-site-modal.png index 6f4d910861b81275826bf156cd3ec9660b81940a..13dc8fa3603e601b949f17899ccac84f4b92c3a1 100644 GIT binary patch literal 40731 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 z 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 z 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 diff --git a/src/renderer/components/create-site-dialog.jsx b/src/renderer/components/create-site-dialog.jsx index ee846806..9830f614 100644 --- a/src/renderer/components/create-site-dialog.jsx +++ b/src/renderer/components/create-site-dialog.jsx @@ -8,7 +8,6 @@ import { __ } from '@wordpress/i18n'; import { Button, Dialog, InputControl, Notice, Stack } from '@wordpress/ui'; import { DEFAULT_PROJECT_TYPE } from '../../project-type.cjs'; import { createSiteProblem, projectChoices, projectHelp } from '../create-site.cjs'; -import { directoryFromFileEntry } from '../site-folder.cjs'; import { FolderField } from './folder-field.jsx'; // The dialog's three answers and the button that sends them. It is inside @@ -35,21 +34,6 @@ function CreateSiteForm({ formId, submitting, defaultDir, onCreate }) { } catch {} }, []); - // Not reached by the intended route, which is the system's dialog above: - // a folder dropped on the input arrives here. - const takeFiles = useCallback((event) => { - const input = event.target; - const files = input.files; - if (files && files.length > 0) { - const resolved = directoryFromFileEntry(files[0], input.value); - setDir(resolved); - // Clearing the error only when there is a directory: a selection that - // resolved to nothing has not fixed anything the message was about. - if (resolved) setError(''); - } - input.value = ''; - }, []); - const submit = (event) => { event.preventDefault(); const problem = createSiteProblem({ name, dir }); @@ -91,7 +75,6 @@ function CreateSiteForm({ formId, submitting, defaultDir, onCreate }) { value={dir} disabled={submitting} onChoose={chooseFolder} - onFiles={takeFiles} /> {error ? ( // An alert, which is said as it appears. The notice is told to diff --git a/src/renderer/components/folder-field.jsx b/src/renderer/components/folder-field.jsx index 463ede15..bb5e57f4 100644 --- a/src/renderer/components/folder-field.jsx +++ b/src/renderer/components/folder-field.jsx @@ -1,14 +1,16 @@ +import { useId } from 'react'; import { __ } from '@wordpress/i18n'; -import { Field, Text } from '@wordpress/ui'; +import { Button, Field, Text } from '@wordpress/ui'; /** * A field whose answer is a folder (#557, #559). * - * The field is a file input, which is what says "choose a folder" without a - * word, and the folder it holds is said under it: the app asks the system - * for a folder itself, since a page is not told where one is, and the input - * is never left holding a selection. The create-site dialog and the settings - * both ask with it. + * The field is a button that asks the system for a folder, since a page is + * not told where one is, and the folder it holds is said under it. Not a + * file input: Chromium draws that one's button and its "No file chosen" in + * its own language, which is not always the window's, and a folder dropped + * on it never had a path to give (#228, #655). The create-site dialog and + * the settings both ask with it. * * @param {Object} props * @param {string} props.label What the folder is for. @@ -17,34 +19,23 @@ import { Field, Text } from '@wordpress/ui'; * @param {string} [props.empty] What to say in place of a folder when there is none. * @param {boolean} [props.disabled] * @param {Function} props.onChoose Asked to open the system's dialog. - * @param {Function} [props.onFiles] A folder dropped on the input, which arrives as files. */ -export function FolderField({ label, description, value, empty, disabled = false, onChoose, onFiles }) { +export function FolderField({ label, description, value, empty, disabled = false, onChoose }) { + const labelId = useId(); + const textId = useId(); + // Named by the label and by what the button says, so "Choose folder" is + // in the name a voice control user would say (#655), and described by the + // folder it holds, so the folder is heard where the button is. return ( - {label} + {label} - } + render={} + aria-labelledby={`${labelId} ${textId}`} disabled={disabled} - onChange={onFiles} - onClick={(event) => { event.preventDefault(); onChoose(); }} - onKeyDown={(event) => { - if (event.key === 'Enter' || event.key === ' ') { - event.preventDefault(); - onChoose(); - } - }} + onClick={onChoose} /> - {value || empty || __('No folder selected yet.')} + }>{value || empty || __('No folder selected yet.')} {description ? {description} : null} ); diff --git a/src/renderer/shell.css b/src/renderer/shell.css index d5488c96..e1d87602 100644 --- a/src/renderer/shell.css +++ b/src/renderer/shell.css @@ -1310,21 +1310,10 @@ body { } /* A folder field (#557, #559), in the create-site dialog and the settings. - The folder is asked for with a file input, as wide as the dialog, and the - folder that was chosen is said under it: a path has no spaces to break - at. */ + The folder that was chosen is said under its button: a path has no + spaces to break at. The button keeps its own width, not the field's. */ .folder-field .file-field-control { - width: 100%; - min-height: var(--wpds-dimension-size-md); - font: inherit; - color: inherit; -} - -/* The ring the design system's own controls have, where the browser would - draw its own. */ -.folder-field .file-field-control:focus-visible { - outline: var(--wpds-border-width-focus) solid var(--wpds-color-stroke-focus); - outline-offset: var(--wpds-border-width-focus); + align-self: flex-start; } .folder-field .file-field-value { diff --git a/src/renderer/site-folder.cjs b/src/renderer/site-folder.cjs index 4fceb0db..c494af33 100644 --- a/src/renderer/site-folder.cjs +++ b/src/renderer/site-folder.cjs @@ -1,7 +1,7 @@ // Where a new site goes, and what its folder is called. // -// Three decisions the Create site modal makes before `setupWordPress` is ever -// called, all of them string work on paths the renderer cannot hand to Node's +// Two decisions the Create site modal makes before `setupWordPress` is ever +// called, both of them string work on paths the renderer cannot hand to Node's // `path` module: it has none. The chosen root arrives in the platform's native // form — `C:\Users\me` on Windows, `/Users/me` elsewhere — so joining a folder // name onto it means picking the separator by looking at the string. @@ -53,48 +53,4 @@ function resolveTargetDir(root, folder) { return `${normalizedRoot}${separator}${folder}`; } -/** - * The directory an `` selection points at. - * - * Nothing reaches this by the intended route: the input's click and keyboard - * handlers are intercepted and go to the native dialog. It runs only when a - * folder is dropped onto the control — a route the app deliberately does not - * support, decided in #228 and closed there. Extracted as it stood, dead branch - * included, because #216 is a refactor and not the place to change what it - * answers: - * - * - `path` plus `webkitRelativePath`, and `path` alone, are the two shapes this - * was written for. Electron removed the `path` augmentation on `File` in v32 - * in favour of `webUtils.getPathForFile`; this app pins Electron 43 and - * bridges no `webUtils`, so neither branch is reachable. - * - What is left is the input's own `value`, which is a fiction: a file input's - * value is empty or the literal `C:\fakepath\` prefix on every platform. So a - * dropped folder resolves to '' or to `C:\fakepath`, and the modal presents - * the second as a real destination. - * - * @param {*} file The first entry of the input's `files` list. - * @param {*} inputValue The input's `value`, read only when `file` has no path. - * @return {string} The directory without a trailing separator, or '' when none - * could be derived. - */ -function directoryFromFileEntry(file, inputValue) { - const relative = file?.webkitRelativePath || ''; - const rawPath = file?.path || ''; - let resolved = ''; - - if (rawPath) { - if (relative) { - resolved = rawPath.slice(0, rawPath.length - relative.length); - } else { - resolved = rawPath.replace(/[\\/][^\\/]*$/, ''); - } - } - - if (!resolved && inputValue) { - resolved = String(inputValue).replace(/[^\\/]*$/, ''); - } - - return resolved.replace(/[\\/]+$/, ''); -} - -module.exports = { sanitizeSiteFolder, resolveTargetDir, directoryFromFileEntry, FALLBACK_FOLDER }; +module.exports = { sanitizeSiteFolder, resolveTargetDir, FALLBACK_FOLDER }; diff --git a/tests/e2e/journeys/create-site.spec.js b/tests/e2e/journeys/create-site.spec.js index 008fea24..d8b290fb 100644 --- a/tests/e2e/journeys/create-site.spec.js +++ b/tests/e2e/journeys/create-site.spec.js @@ -48,7 +48,7 @@ test( 'the create-site dialog refuses a missing name or location, starts clean e const dialog = ui.createSiteDialog( page ); const name = dialog.getByLabel( 'Site name', { exact: true } ); - const location = dialog.getByLabel( 'Location', { exact: true } ); + const location = dialog.getByRole( 'button', { name: 'Location Choose folder…', exact: true } ); const core = dialog.getByRole( 'radio', { name: 'WordPress Core', exact: true } ); const gutenberg = dialog.getByRole( 'radio', { name: 'Gutenberg', exact: true } ); const create = dialog.getByRole( 'button', { name: 'Create site', exact: true } ); @@ -64,6 +64,10 @@ test( 'the create-site dialog refuses a missing name or location, starts clean e const projects = dialog.getByRole( 'radiogroup', { name: 'Project', exact: true } ); await expect( projects ).toHaveAccessibleDescription( `${ projectHelp( 'core' ).about } ${ projectHelp( 'core' ).lasting }` ); expect( projectHelp( 'core' ).lasting ).toBe( 'A site’s project cannot be changed later.' ); + // The folder is said where its button is, before what the field is for + // (#655). + const LOCATION_HELP = 'Choose the parent folder where you want this new site created. A new subdirectory will be created for the site.'; + await expect( location ).toHaveAccessibleDescription( `No folder selected yet. ${ LOCATION_HELP }` ); // INVARIANT — it says which answer is missing, one at a time, as an // alert, and starts nothing while one is: a name of spaces is no name. @@ -80,6 +84,7 @@ test( 'the create-site dialog refuses a missing name or location, starts clean e // about it away. await location.press( 'Enter' ); await expect( dialog.getByText( parent, { exact: true } ) ).toBeVisible(); + await expect( location ).toHaveAccessibleDescription( `${ parent } ${ LOCATION_HELP }` ); await expect( dialog.getByText( 'Please choose where to create the site.', { exact: true } ) ).toHaveCount( 0 ); await gutenberg.click(); await expect( gutenberg ).toBeChecked(); diff --git a/tests/e2e/journeys/i18n.spec.js b/tests/e2e/journeys/i18n.spec.js index 20c1ad0b..e176223f 100644 --- a/tests/e2e/journeys/i18n.spec.js +++ b/tests/e2e/journeys/i18n.spec.js @@ -102,6 +102,10 @@ test( 'the first-run screen and the create-site dialog are fully translatable', await expect( dialog ).toBeVisible(); await expect( dialog.getByRole( 'button', { name: /^\[/ } ).first() ).toBeVisible(); expect( await unwrapped( dialog ) ).toEqual( [] ); + // The folder's button is the app's own, not a file input, whose button + // and "No file chosen" Chromium draws in its own language, where the scan + // cannot see them (#655). + await expect( dialog.getByRole( 'button', { name: `${ pseudoLocalize( 'Location' ) } ${ pseudoLocalize( 'Choose folder…' ) }`, exact: true } ) ).toHaveText( pseudoLocalize( 'Choose folder…' ) ); // A validation error is wrapped too. await dialog.getByRole( 'button', { name: pseudoLocalize( 'Create site' ), exact: true } ).click(); @@ -116,6 +120,7 @@ test( 'the settings dialog is fully translatable, on both of its tabs', async ( await expect( dialog ).toBeVisible(); await expect( dialog.getByText( pseudoLocalize( 'Not set: the create-site dialog asks each time.' ), { exact: true } ) ).toBeVisible(); expect( await unwrapped( dialog ) ).toEqual( [] ); + await expect( dialog.getByRole( 'button', { name: `${ pseudoLocalize( 'New sites go here' ) } ${ pseudoLocalize( 'Choose folder…' ) }`, exact: true } ) ).toHaveText( pseudoLocalize( 'Choose folder…' ) ); // The Sites tab, once it has the PHP versions: their numbers are not // words and stay as they are. diff --git a/tests/e2e/journeys/settings.spec.js b/tests/e2e/journeys/settings.spec.js index 832c67a5..7d097687 100644 --- a/tests/e2e/journeys/settings.spec.js +++ b/tests/e2e/journeys/settings.spec.js @@ -41,7 +41,7 @@ test( 'the folder new sites go in is chosen in the settings, used by the create- // INVARIANT — a folder chosen is shown, kept, and offered to be forgotten. await session.answerFileDialog( [ parent ] ); - const field = dialog.getByLabel( 'New sites go here', { exact: true } ); + const field = dialog.getByRole( 'button', { name: 'New sites go here Choose folder…', exact: true } ); await field.press( 'Enter' ); await expect( dialog.getByText( parent, { exact: true } ) ).toBeVisible(); await expect( notSet ).toHaveCount( 0 ); @@ -67,7 +67,7 @@ test( 'the folder new sites go in is chosen in the settings, used by the create- await expect( create.getByText( 'No folder selected yet.', { exact: true } ) ).toHaveCount( 0 ); const other = session.track( fs.mkdtempSync( path.join( os.tmpdir(), 'wpct-e2e-other-' ) ) ); await session.answerFileDialog( [ other ] ); - await create.getByLabel( 'Location', { exact: true } ).press( 'Enter' ); + await create.getByRole( 'button', { name: 'Location Choose folder…', exact: true } ).press( 'Enter' ); await expect( create.getByText( other, { exact: true } ) ).toBeVisible(); await ui.closeDialogButton( create ).click(); await expect( create ).toHaveCount( 0 ); diff --git a/tests/e2e/real-setup/create-site.spec.js b/tests/e2e/real-setup/create-site.spec.js index 7050ca14..513c6299 100644 --- a/tests/e2e/real-setup/create-site.spec.js +++ b/tests/e2e/real-setup/create-site.spec.js @@ -72,7 +72,7 @@ for ( const target of TARGETS ) { await name.fill( 'real-setup' ); await expect( name ).toHaveValue( 'real-setup', { timeout: 2_000 } ); } ).toPass( { timeout: 30_000 } ); - await modal.getByLabel( 'Location', { exact: true } ).press( 'Enter' ); + await modal.getByRole( 'button', { name: 'Location Choose folder…', exact: true } ).press( 'Enter' ); await modal.getByRole( 'button', { name: 'Create site', exact: true } ).click(); } ); diff --git a/tests/unit/site-folder.test.cjs b/tests/unit/site-folder.test.cjs index e741d762..f2e57e3a 100644 --- a/tests/unit/site-folder.test.cjs +++ b/tests/unit/site-folder.test.cjs @@ -8,7 +8,6 @@ const assert = require('node:assert/strict'); const { sanitizeSiteFolder, resolveTargetDir, - directoryFromFileEntry, FALLBACK_FOLDER } = require('../../src/renderer/site-folder.cjs'); @@ -64,38 +63,3 @@ test('resolveTargetDir with no root is the folder name alone', () => { assert.equal(resolveTargetDir('', 'my-site'), 'my-site'); assert.equal(resolveTargetDir(null, 'my-site'), 'my-site'); }); - -// What follows pins what this function does with the entries it actually gets, -// which is not the same as what it was written for. The `path` property it -// prefers was removed from `File` in Electron 32, this app pins Electron 43, -// and no `webUtils` bridge replaces it — so every real entry takes the -// fallback. Asserting the `path` shapes would be green and prove nothing. -// -// The only route that reaches this at all is dropping a folder on the control, -// which the app deliberately does not support — #228, closed as not planned. -// So these record where an unsupported route ends, and are the tests a change -// of mind would have to rewrite. - -test('directoryFromFileEntry gets nothing from a real dropped entry', () => { - // A File in Electron 43. No `path`, and `webkitRelativePath` alone carries - // no absolute part to cut it off. - assert.equal(directoryFromFileEntry({ webkitRelativePath: 'sites/inner/file.txt' }, ''), ''); - assert.equal(directoryFromFileEntry({}, ''), ''); - assert.equal(directoryFromFileEntry(null, ''), ''); - assert.equal(directoryFromFileEntry(undefined, undefined), ''); -}); - -test('directoryFromFileEntry passes C:\\fakepath through — #228', () => { - // Recorded, not endorsed. A file input's `value` is either empty or this - // literal prefix on every platform, browsers substituting it for the real - // path, so the fallback's "typed path" is a fiction. The modal shows this - // as the chosen folder and submit hands it to setup. - assert.equal(directoryFromFileEntry({}, 'C:\\fakepath\\my-folder'), 'C:\\fakepath'); -}); - -test('directoryFromFileEntry returns nothing rather than a wrong directory', () => { - // '' is what the caller checks before it clears the chosen directory — a - // bare segment is not a directory anyone chose. - assert.equal(directoryFromFileEntry({}, 'file.txt'), ''); - assert.equal(directoryFromFileEntry({}, ''), ''); -});