This reverts commitec5fa1d4c0. Revert "Bug 1606785 - Format Firefox CSS files with Prettier r=desktop-theme-reviewers,perftest-reviewers,places-reviewers,translations-reviewers,omc-reviewers,backup-reviewers,browser-installer-reviewers,sparky,dao,pdahiya,nrishel,kpatenio" This reverts commitbaa5d72bbd. Revert "Bug 1606785 - Format browser/themes and toolkit/themes CSS files with Prettier r=desktop-theme-reviewers,pip-reviewers,tabbrowser-reviewers,places-reviewers,dao,mconley" This reverts commit9604b0a8ae. Revert "Bug 1606785 - Format browser/themes/preferences CSS files with Prettier r=settings-reviewers,desktop-theme-reviewers,dao,mconley" This reverts commit686c1cf85f. Revert "Bug 1606785 - Format urlbar CSS files with Prettier r=urlbar-reviewers,desktop-theme-reviewers,dao" This reverts commita7a4f31251. Revert "Bug 1606785 - Format webcompat CSS files with Prettier r=webcompat-reviewers,denschub" This reverts commit41bc4d5237. Revert "Bug 1606785 - Format search CSS files with Prettier r=search-reviewers,jteow" This reverts commit7bb7f82374. Revert "Bug 1606785 - Format dom CSS files with Prettier r=emilio" This reverts commitc22e910235. Revert "Bug 1606785 - Format android CSS files with Prettier r=geckoview-reviewers,hiro" This reverts commitc08e43fc3d. Revert "Bug 1606785 - Format layout CSS files with Prettier r=layout-reviewers,dholbert" This reverts commit4f2a32d1a4. Revert "Bug 1606785 - Format devtools CSS files with Prettier r=devtools-reviewers,nchevobbe,frontend-codestyle-reviewers" This reverts commitc05f675ddf. Revert "Bug 1606785 - Format recomp CSS files with Prettier r=reusable-components-reviewers,desktop-theme-reviewers,dao,mkennedy" This reverts commitb10c7de8d0. Revert "Bug 1606785 - Format sidebar CSS files with Prettier r=sidebar-reviewers,desktop-theme-reviewers,dao,nsharpley" This reverts commitd32c555e37. Revert "Bug 1606785 - Format shopping CSS files with Prettier r=shopping-reviewers,desktop-theme-reviewers,dao,rking" This reverts commit965887a708. Revert "Bug 1606785 - Format profiles CSS files with Prettier r=profiles-reviewers,desktop-theme-reviewers,dao,mossop" This reverts commit8338860f74. Revert "Bug 1606785 - Format genai and ml CSS files with Prettier r=firefox-ai-ml-reviewers,Mardak" This reverts commitd66681f553. Revert "Bug 1606785 - Format firefoxview CSS files with Prettier r=fxview-reviewers,desktop-theme-reviewers,dao,jsudiaman" This reverts commit530b815cad. Revert "Bug 1606785 - Format aboutlogins, megalist, and form autofill CSS files with Prettier r=credential-management-reviewers,mtigley,desktop-theme-reviewers,dao" This reverts commit813c864381.
MozInputFolder
moz-input-folder is a reusable component that provides the ability to browse and pick a folder from the file system. It displays the path and icon of the selected folder to the user. It can also be configured to display custom text if needed.
<div style={{width: "500px"}} onClickCapture={e => e.stopPropagation()}>
<moz-input-folder
label="Save files to"
placeholder="Select folder">
</moz-input-folder>
</div>
Usage guidelines
When to use
- Use
moz-input-folderwhen you want to allow a user to select a directory.
When not to use
- When users need to select individual files rather than folders.
Code
The source for moz-input-folder can be found under toolkit/content/widgets/moz-input-folder/
How to use moz-input-folder
Importing the element
Like other custom elements, you should usually be able to rely on moz-input-folder getting lazy loaded at the time of first use.
See this documentation for more information on using design system custom elements.
Setting the label
Providing a label for the moz-input-folder component is crucial for usability and accessibility:
- Helps users understand the purpose of the folder picker.
- Improves accessibility by ensuring screen readers can announce the function of the input.
To set a label, use the label attribute. In general, the label should be controlled by Fluent.
<moz-input-folder label="Label text"></moz-input-folder>
<div style={{width: '500px'}} onClickCapture={e => e.stopPropagation()}>
<moz-input-folder label="Label text"></moz-input-folder>
</div>
Setting the description
In order to set a description, use the description attribute.
In general, the description should be controlled by Fluent. This is the the preferred way of setting descriptions since it ensures consistency across instances of moz-input-folder.
<moz-input-folder label="Label" description="Description text"></moz-input-folder>
<div style={{width: '500px'}} onClickCapture={e => e.stopPropagation()}>
<moz-input-folder
label="Label"
description="Description text">
</moz-input-folder>
</div>
However, moz-input-folder does support a slot element if your use case is more complex.
<moz-input-folder label="Label">
<span slot="description">A more complex description</span>
</moz-input-folder>
<div style={{width: "500px"}} onClickCapture={e => e.stopPropagation()}>
<moz-input-folder label="Label">
<span slot="description">A more <b>complex</b> description</span>
</moz-input-folder>
</div>
Setting the value
The value attribute of moz-input-folder sets the initial folder path displayed in the input field. When a new folder is selected, the value gets updated with that folder's path.
<moz-input-folder label="Save files to:" value="/User/Downloads"></moz-input-folder>
<div style={{width: '500px'}} onClickCapture={e => e.stopPropagation()}>
<moz-input-folder label="Save files to:" value="/User/Downloads"></moz-input-folder>
</div>
Setting the displayValue
Use displayValue property to display something other than a folder path in the input element. Listen to the moz-input-folder change event to set a displayValue after the new folder was selected. The folder property represents the selected folder in the file system (nsIFile object). You can use properties of the folder when setting a displayValue (e.g., folder.path, folder.displayName or folder.leafName).
<moz-input-folder label="Save files to:" value="/User/Downloads" displayvalue="Downloads"></moz-input-folder>
// Code example
let mozInputFolder = document.querySelector("moz-input-folder");
mozInputFolder.addEventListener(
"change",
() => {
mozInputFolder.displayValue = mozInputFolder.folder.displayName;
}
);
<div style={{width: '500px'}} onClickCapture={e => e.stopPropagation()}>
<moz-input-folder label="Save files to:" value="/User/Downloads" displayvalue="Downloads"></moz-input-folder>
</div>
Setting the disabled state
In order to disable the moz-input-folder, add disabled="" or disabled to the markup with no value.
<moz-input-folder label="Label" disabled></moz-input-folder>
<div style={{width: '500px'}} onClickCapture={e => e.stopPropagation()}>
<moz-input-folder label="Label" disabled></moz-input-folder>
</div>
Setting the accesskey
accesskey defines an keyboard shortcut for the input.
<moz-input-folder label="Label with accesskey" accesskey="L"></moz-input-folder>
<div style={{width: '500px'}} onClickCapture={e => e.stopPropagation()}>
<moz-input-folder label="Label with accesskey" accesskey="L"></moz-input-folder>
</div>
Fluent usage
The label, description, placeholder and accesskey attributes of moz-input-folder will generally be provided via Fluent attributes.
The relevant data-l10n-attrs are set automatically, so to get things working you just need to supply a data-l10n-id as you would with any other element.
For example, the following Fluent messages:
moz-input-folder-label =
.label = Save files to
moz-input-folder-placeholder =
.label = Save files to
.placeholder = Select folder
moz-input-folder-description =
.label = Save files to
.description = Description text
.placeholder = Select folder
moz-input-folder-with-accesskey =
.label = Save files to
.accesskey = v
would be used to set text and attributes on the different moz-input-folder elements as follows:
<moz-input-folder data-l10n-id="moz-input-folder-label"></moz-input-folder>
<moz-input-folder data-l10n-id="moz-input-folder-placeholder"></moz-input-folder>
<moz-input-folder data-l10n-id="moz-input-folder-description"></moz-input-folder>
<moz-input-folder data-l10n-id="moz-input-folder-with-accesskey"></moz-input-folder>