diff options
| author | 2024-07-08 09:38:27 +0200 | |
|---|---|---|
| committer | 2024-07-08 09:38:27 +0200 | |
| commit | bbbf6ebe376c7b6c3a64e14571a3a477b880e3ad (patch) | |
| tree | d24aa92f743de5c440ce786d61cc86f72bf9a3e7 /web/source/settings/views/admin | |
| parent | [chore]: Bump github.com/microcosm-cc/bluemonday from 1.0.26 to 1.0.27 (#3081) (diff) | |
| download | gotosocial-bbbf6ebe376c7b6c3a64e14571a3a477b880e3ad.tar.xz | |
[frontend] Better autocapitalize/spellcheck settings on forms (#3077)
Diffstat (limited to 'web/source/settings/views/admin')
9 files changed, 63 insertions, 11 deletions
| diff --git a/web/source/settings/views/admin/actions/keys/expireremote.tsx b/web/source/settings/views/admin/actions/keys/expireremote.tsx index d695ec0c8..1d62f9439 100644 --- a/web/source/settings/views/admin/actions/keys/expireremote.tsx +++ b/web/source/settings/views/admin/actions/keys/expireremote.tsx @@ -22,9 +22,33 @@ import { TextInput } from "../../../../components/form/inputs";  import MutationButton from "../../../../components/form/mutation-button";  import { useTextInput } from "../../../../lib/form";  import { useInstanceKeysExpireMutation } from "../../../../lib/query/admin/actions"; +import isValidDomain from "is-valid-domain";  export default function ExpireRemote({}) { -	const domainField = useTextInput("domain"); +	const domainField = useTextInput("domain", { +		validator: (v: string) => { +			if (v.length === 0) { +				return ""; +			} + +			if (v[v.length-1] === ".") { +				return "invalid domain"; +			} + +			const valid = isValidDomain(v, { +				subdomain: true, +				wildcard: false, +				allowUnicode: true, +				topLevel: false, +			}); + +			if (valid) { +				return ""; +			} + +			return "invalid domain"; +		} +	});  	const [expire, expireResult] = useInstanceKeysExpireMutation(); @@ -52,11 +76,13 @@ export default function ExpireRemote({}) {  			<TextInput  				field={domainField}  				label="Domain" -				type="string" +				type="text" +				autoCapitalize="none" +				spellCheck="false"  				placeholder="example.org"  			/>  			<MutationButton -				disabled={!domainField.value} +				disabled={!domainField.value || !domainField.valid}  				label="Expire keys"  				result={expireResult}  			/> diff --git a/web/source/settings/views/admin/debug/apurl/index.tsx b/web/source/settings/views/admin/debug/apurl/index.tsx index a0c2fc738..b66794132 100644 --- a/web/source/settings/views/admin/debug/apurl/index.tsx +++ b/web/source/settings/views/admin/debug/apurl/index.tsx @@ -53,6 +53,9 @@ export default function ApURL() {  				<TextInput  					field={urlField}  					label="URL" +					type="url" +					pattern="(http|https):\/\/.+" +					placeholder="https://example.org/users/someone"  				/>  				<MutationButton  					disabled={!urlField.value} diff --git a/web/source/settings/views/admin/emoji/category-select.tsx b/web/source/settings/views/admin/emoji/category-select.tsx index 683e146d8..fabcad9b6 100644 --- a/web/source/settings/views/admin/emoji/category-select.tsx +++ b/web/source/settings/views/admin/emoji/category-select.tsx @@ -126,6 +126,8 @@ export function CategorySelect({ field, children }: PropsWithChildren<CategorySe  				items={categoryItems}  				label="Category"  				placeholder="e.g., reactions" +				autoCapitalize="none" +				spellCheck="false"  			>  				{children}  			</ComboBox> diff --git a/web/source/settings/views/admin/emoji/local/new-emoji.tsx b/web/source/settings/views/admin/emoji/local/new-emoji.tsx index f2f5a56b1..b9c37ca8e 100644 --- a/web/source/settings/views/admin/emoji/local/new-emoji.tsx +++ b/web/source/settings/views/admin/emoji/local/new-emoji.tsx @@ -117,6 +117,8 @@ export default function NewEmojiForm() {  				<TextInput  					field={form.shortcode}  					label="Shortcode, must be unique among the instance's local emoji" +					autoCapitalize="none" +					spellCheck="false"  					{...{pattern: "^\\w{2,30}$"}}  				/> diff --git a/web/source/settings/views/admin/emoji/local/overview.tsx b/web/source/settings/views/admin/emoji/local/overview.tsx index b4fa48d74..e9c5fae0c 100644 --- a/web/source/settings/views/admin/emoji/local/overview.tsx +++ b/web/source/settings/views/admin/emoji/local/overview.tsx @@ -116,6 +116,8 @@ function EmojiList({ emoji }: EmojiListParams) {  						field={filterField}  						name="emoji-shortcode"  						placeholder="Search" +						autoCapitalize="none" +						spellCheck="false"  					/>  				</div>  				<div className="entries scrolling"> diff --git a/web/source/settings/views/admin/emoji/remote/steal-this-look.tsx b/web/source/settings/views/admin/emoji/remote/steal-this-look.tsx index 43d0b83e1..69d7b8bb5 100644 --- a/web/source/settings/views/admin/emoji/remote/steal-this-look.tsx +++ b/web/source/settings/views/admin/emoji/remote/steal-this-look.tsx @@ -52,9 +52,10 @@ export default function StealThisLook({ emojiCodes }) {  					</label>  					<div className="row">  						<input -							type="text"  							id="url"  							name="url" +							type="url" +							pattern="(http|https):\/\/.+"  							onChange={urlField.onChange}  							value={urlField.value}  						/> diff --git a/web/source/settings/views/admin/http-header-permissions/create.tsx b/web/source/settings/views/admin/http-header-permissions/create.tsx index 6613ac0f1..b3fec4b6d 100644 --- a/web/source/settings/views/admin/http-header-permissions/create.tsx +++ b/web/source/settings/views/admin/http-header-permissions/create.tsx @@ -100,7 +100,7 @@ export default function HeaderPermCreateForm({ permType }: { permType: PermType  				field={form.header}  				label={  					<> -						HTTP Header Name  +						Header Name   						 <a  							href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers"  							target="_blank" @@ -112,12 +112,15 @@ export default function HeaderPermCreateForm({ permType }: { permType: PermType  					</>  				}  				placeholder={"User-Agent"} +				autoCapitalize="none" +				spellCheck="false" +				{...{className: "monospace"}}  			/>  			<TextInput  				field={form.regex}  				label={  					<> -						HTTP Header Value RE2 Regex  +						Value Regex   						<a  							href="https://github.com/google/re2/wiki/Syntax"  							target="_blank" @@ -129,6 +132,8 @@ export default function HeaderPermCreateForm({ permType }: { permType: PermType  					</>  				}  				placeholder={"^.*Some-User-Agent.*$"} +				autoCapitalize="none" +				spellCheck="false"  				{...{className: "monospace"}}  			/>  			<MutationButton diff --git a/web/source/settings/views/admin/http-header-permissions/detail.tsx b/web/source/settings/views/admin/http-header-permissions/detail.tsx index 456f9a357..522f2dba2 100644 --- a/web/source/settings/views/admin/http-header-permissions/detail.tsx +++ b/web/source/settings/views/admin/http-header-permissions/detail.tsx @@ -164,7 +164,7 @@ function PermDeets({  			<dl className="info-list">  				<div className="info-list-entry">  					<dt>ID</dt> -					<dd>{perm.id}</dd> +					<dd className="monospace">{perm.id}</dd>  				</div>  				<div className="info-list-entry">  					<dt>Created</dt> @@ -176,10 +176,10 @@ function PermDeets({  				</div>  				<div className="info-list-entry">  					<dt>Header Name</dt> -					<dd>{perm.header}</dd> +					<dd className="monospace">{perm.header}</dd>  				</div>  				<div className="info-list-entry"> -					<dt>Header Value Regex</dt> +					<dt>Value Regex</dt>  					<dd className="monospace">{perm.regex}</dd>  				</div>  				<div className="info-list-entry"> diff --git a/web/source/settings/views/admin/instance/settings.tsx b/web/source/settings/views/admin/instance/settings.tsx index 03a961589..8d377a6ea 100644 --- a/web/source/settings/views/admin/instance/settings.tsx +++ b/web/source/settings/views/admin/instance/settings.tsx @@ -79,7 +79,10 @@ function InstanceSettingsForm({ data: instance }: InstanceSettingsFormProps) {  	const [submitForm, result] = useFormSubmit(form, useUpdateInstanceMutation());  	return ( -		<form onSubmit={submitForm}> +		<form +			onSubmit={submitForm} +			autoComplete="none" +		>  			<h1>Instance Settings</h1>  			<div className="form-section-docs"> @@ -97,7 +100,8 @@ function InstanceSettingsForm({ data: instance }: InstanceSettingsFormProps) {  			<TextInput  				field={form.title}  				label={`Instance title (max ${titleLimit} characters)`} -				placeholder="My GoToSocial instance" +				autoCapitalize="words" +				placeholder="My GoToSocial Instance"  			/>  			<div className="file-upload" aria-labelledby="avatar"> @@ -117,6 +121,7 @@ function InstanceSettingsForm({ data: instance }: InstanceSettingsFormProps) {  							field={form.thumbnailDesc}  							label="Avatar image description"  							placeholder="A cute drawing of a smiling sloth." +							autoCapitalize="sentences"  						/>  					</div>  				</div> @@ -139,6 +144,7 @@ function InstanceSettingsForm({ data: instance }: InstanceSettingsFormProps) {  				field={form.shortDesc}  				label={`Short description (markdown accepted, max ${shortDescLimit} characters)`}  				placeholder="A small testing instance for the GoToSocial alpha software." +				autoCapitalize="sentences"  				rows={6}  			/> @@ -146,6 +152,7 @@ function InstanceSettingsForm({ data: instance }: InstanceSettingsFormProps) {  				field={form.description}  				label={`Full description (markdown accepted, max ${descLimit} characters)`}  				placeholder="A small testing instance for the GoToSocial alpha software. Just trying it out, my main instance is https://example.com" +				autoCapitalize="sentences"  				rows={6}  			/> @@ -153,6 +160,7 @@ function InstanceSettingsForm({ data: instance }: InstanceSettingsFormProps) {  				field={form.terms}  				label={`Terms & Conditions (markdown accepted, max ${termsLimit} characters)`}  				placeholder="Terms and conditions of using this instance, data policy, imprint, GDPR stuff, yadda yadda." +				autoCapitalize="sentences"  				rows={6}  			/> @@ -172,12 +180,15 @@ function InstanceSettingsForm({ data: instance }: InstanceSettingsFormProps) {  				field={form.contactUser}  				label="Contact user (local account username)"  				placeholder="admin" +				autoCapitalize="none" +				spellCheck="false"  			/>  			<TextInput  				field={form.contactEmail}  				label="Contact email"  				placeholder="admin@example.com" +				type="email"  			/>  			<MutationButton label="Save" result={result} disabled={false} /> | 
