From 986a3676d31aecaa204825945de90fcb22e269e5 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 29 Nov 2024 17:33:06 +0100 Subject: [PATCH] Change server rules to be collapsible (#33039) --- app/javascript/entrypoints/public.tsx | 74 +++++-------------- .../styles/mastodon-light/diff.scss | 11 --- app/javascript/styles/mastodon/about.scss | 32 +++++++- .../styles/mastodon/components.scss | 60 --------------- app/views/auth/registrations/rules.html.haml | 5 +- 5 files changed, 51 insertions(+), 131 deletions(-) diff --git a/app/javascript/entrypoints/public.tsx b/app/javascript/entrypoints/public.tsx index c1e8418014..9e8ff9caa1 100644 --- a/app/javascript/entrypoints/public.tsx +++ b/app/javascript/entrypoints/public.tsx @@ -230,62 +230,6 @@ function loaded() { } }, ); - - Rails.delegate( - document, - 'button.status__content__spoiler-link', - 'click', - function () { - if (!(this instanceof HTMLButtonElement)) return; - - const statusEl = this.parentNode?.parentNode; - - if ( - !( - statusEl instanceof HTMLDivElement && - statusEl.classList.contains('.status__content') - ) - ) - return; - - if (statusEl.dataset.spoiler === 'expanded') { - statusEl.dataset.spoiler = 'folded'; - this.textContent = new IntlMessageFormat( - localeData['status.show_more'] ?? 'Show more', - locale, - ).format() as string; - } else { - statusEl.dataset.spoiler = 'expanded'; - this.textContent = new IntlMessageFormat( - localeData['status.show_less'] ?? 'Show less', - locale, - ).format() as string; - } - }, - ); - - document - .querySelectorAll('button.status__content__spoiler-link') - .forEach((spoilerLink) => { - const statusEl = spoilerLink.parentNode?.parentNode; - - if ( - !( - statusEl instanceof HTMLDivElement && - statusEl.classList.contains('.status__content') - ) - ) - return; - - const message = - statusEl.dataset.spoiler === 'expanded' - ? (localeData['status.show_less'] ?? 'Show less') - : (localeData['status.show_more'] ?? 'Show more'); - spoilerLink.textContent = new IntlMessageFormat( - message, - locale, - ).format() as string; - }); } Rails.delegate( @@ -439,6 +383,24 @@ Rails.delegate(document, '#registration_new_user,#new_user', 'submit', () => { }); }); +Rails.delegate(document, '.rules-list button', 'click', ({ target }) => { + if (!(target instanceof HTMLElement)) { + return; + } + + const button = target.closest('button'); + + if (!button) { + return; + } + + if (button.ariaExpanded === 'true') { + button.ariaExpanded = 'false'; + } else { + button.ariaExpanded = 'true'; + } +}); + function main() { ready(loaded).catch((error: unknown) => { console.error(error); diff --git a/app/javascript/styles/mastodon-light/diff.scss b/app/javascript/styles/mastodon-light/diff.scss index f2fbfefc85..b19075139a 100644 --- a/app/javascript/styles/mastodon-light/diff.scss +++ b/app/javascript/styles/mastodon-light/diff.scss @@ -108,17 +108,6 @@ background: lighten($white, 4%); } -// Change the background colors of status__content__spoiler-link -.reply-indicator__content .status__content__spoiler-link, -.status__content .status__content__spoiler-link { - background: $ui-base-color; - - &:hover, - &:focus { - background: lighten($ui-base-color, 4%); - } -} - .account-gallery__item a { background-color: $ui-base-color; } diff --git a/app/javascript/styles/mastodon/about.scss b/app/javascript/styles/mastodon/about.scss index 48fe9449f0..9307c21883 100644 --- a/app/javascript/styles/mastodon/about.scss +++ b/app/javascript/styles/mastodon/about.scss @@ -31,13 +31,41 @@ $fluid-breakpoint: $maximum-width + 20px; padding-inline-start: 3em; font-weight: 500; counter-increment: list-counter; + min-height: 4ch; + + button { + background: transparent; + border: 0; + padding: 0; + margin: 0; + text-align: start; + font: inherit; + + &:hover, + &:focus, + &:active { + background: transparent; + } + + &[aria-expanded='false'] .rules-list__hint { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + @supports (-webkit-line-clamp: 2) { + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + white-space: normal; + } + } + } &::before { content: counter(list-counter); position: absolute; inset-inline-start: 0; - top: 50%; - transform: translateY(-50%); + top: 1em; background: $highlight-text-color; color: $ui-base-color; border-radius: 50%; diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index b5ab74858d..f028f3b2e9 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -1077,26 +1077,6 @@ body > [data-popper-placement] { color: $highlight-text-color; } - .status__content__spoiler-link { - background: $action-button-color; - - &:hover, - &:focus { - background: lighten($action-button-color, 7%); - text-decoration: none; - } - - &::-moz-focus-inner { - border: 0; - } - - &::-moz-focus-inner, - &:focus, - &:active { - outline: 0 !important; - } - } - .status__content__text { display: none; @@ -1354,21 +1334,6 @@ body > [data-popper-placement] { color: $dark-text-color; } -.status__content__spoiler-link { - display: inline-block; - border-radius: 2px; - background: transparent; - border: 0; - color: $inverted-text-color; - font-weight: 700; - font-size: 11px; - padding: 0 6px; - text-transform: uppercase; - line-height: 20px; - cursor: pointer; - vertical-align: top; -} - .status__wrapper--filtered { color: $dark-text-color; border: 0; @@ -1736,11 +1701,6 @@ body > [data-popper-placement] { height: 24px; margin: -1px 0 0; } - - .status__content__spoiler-link { - line-height: 24px; - margin: -1px 0 0; - } } .media-gallery, @@ -2288,17 +2248,6 @@ a.account__display-name { .status__avatar { opacity: 0.5; } - - a.status__content__spoiler-link { - background: $ui-base-lighter-color; - color: $inverted-text-color; - - &:hover, - &:focus { - background: lighten($ui-base-lighter-color, 7%); - text-decoration: none; - } - } } .notification__report { @@ -6310,15 +6259,6 @@ a.status-card { color: $primary-text-color; } - .status__content__spoiler-link { - color: $primary-text-color; - background: $ui-primary-color; - - &:hover { - background: lighten($ui-primary-color, 8%); - } - } - .dialog-option { align-items: center; gap: 12px; diff --git a/app/views/auth/registrations/rules.html.haml b/app/views/auth/registrations/rules.html.haml index 3a05ed54f0..69459c0233 100644 --- a/app/views/auth/registrations/rules.html.haml +++ b/app/views/auth/registrations/rules.html.haml @@ -19,8 +19,9 @@ %ol.rules-list - @rules.each do |rule| %li - .rules-list__text= rule.text - .rules-list__hint= rule.hint + %button{ type: 'button', aria: { expanded: 'false' } } + .rules-list__text= rule.text + .rules-list__hint= rule.hint .stacked-actions - accept_path = @invite_code.present? ? public_invite_url(invite_code: @invite_code, accept: @accept_token) : new_user_registration_path(accept: @accept_token)