Redesign: Update visibility settings in user settings (#40639)

This commit is contained in:
Claire
2026-09-22 12:22:42 +00:00
committed by GitHub
parent f20e68ffe3
commit 86d4a154b3
4 changed files with 125 additions and 11 deletions

View File

@@ -180,6 +180,10 @@ async function loaded() {
document.querySelector('#user_settings_attributes_default_privacy'),
);
updateDefaultDiscoverableFromPrivacy(
document.querySelector('#user_settings_attributes_split_default_privacy'),
);
truncateRuleHints();
applyRailsA11yPatches();
@@ -444,6 +448,71 @@ on('change', '#user_settings_attributes_default_privacy', ({ target }) => {
updateDefaultQuotePrivacyFromPrivacy(target);
});
const updateDefaultDiscoverableFromPrivacy = (
privacySelect: EventTarget | null,
) => {
if (!(privacySelect instanceof HTMLSelectElement) || !privacySelect.form)
return;
const checkbox = privacySelect.form.querySelector<HTMLInputElement>(
'input#user_settings_attributes_split_default_privacy_discoverable',
);
if (!checkbox) return;
if (privacySelect.value === 'private') {
checkbox.checked = false;
}
setInputDisabled(checkbox, privacySelect.value === 'private');
};
on(
'change',
'#user_settings_attributes_split_default_privacy',
({ target }) => {
updateDefaultDiscoverableFromPrivacy(target);
},
);
const updateDefaultQuotePrivacyFromSplitPrivacy = () => {
const privacySelect = document.querySelector<HTMLSelectElement>(
'select#user_settings_attributes_split_default_privacy',
);
if (!(privacySelect instanceof HTMLSelectElement) || !privacySelect.form)
return;
const discoverableCheckbox = document.querySelector<HTMLInputElement>(
'input#user_settings_attributes_split_default_privacy_discoverable',
);
if (!discoverableCheckbox) return;
const select = privacySelect.form.querySelector<HTMLSelectElement>(
'select#user_settings_attributes_default_quote_policy',
);
if (!select) return;
let privacy = privacySelect.value;
if (privacy === 'public' && !discoverableCheckbox.checked)
privacy = 'unlisted';
setInputHint(select, privacy);
if (privacySelect.value === 'private') {
select.value = 'nobody';
setInputDisabled(select, true);
} else {
setInputDisabled(select, false);
}
};
on(
'change',
'#user_settings_attributes_split_default_privacy,#user_settings_attributes_split_default_privacy_discoverable',
() => {
updateDefaultQuotePrivacyFromSplitPrivacy();
},
);
// Empty the honeypot fields in JS in case something like an extension
// automatically filled them.
on('submit', '#registration_new_user,#new_user', () => {