Accessibility: Add header tags missing in title sections (#30776)
* Fixed missing header in create account * Fixed modal header * Fixed header for suggestionList for autocomplete popup * Fixed heading for search hints title * Fixed header tag in search suggestion header * Fixed header tag in RHS title * Fixed header in RHS search results title * Fixed header for RHS CHannel Info title * Linting * Fix tests * Styling fix * Linting * PR Feedback * Fixed tests * Moved subtitle into h2 * Fix tests from merge * Linting * Fix snapshots * Updated playwright tests snapshots --------- Co-authored-by: Mattermost Build <build@mattermost.com>
Двоичные данные
e2e-tests/playwright/specs/visual/common/landing_page.spec.ts-snapshots/landing-page-visual-check-chrome-linux.png
Обычный файл
|
После Ширина: | Высота: | Размер: 96 KiB |
Двоичные данные
e2e-tests/playwright/specs/visual/common/landing_page.spec.ts-snapshots/landing-page-visual-check-firefox-linux.png
Обычный файл
|
После Ширина: | Высота: | Размер: 172 KiB |
Двоичные данные
e2e-tests/playwright/specs/visual/common/landing_page.spec.ts-snapshots/landing-page-visual-check-ipad-linux.png
Обычный файл
|
После Ширина: | Высота: | Размер: 84 KiB |
|
После Ширина: | Высота: | Размер: 186 KiB |
|
После Ширина: | Высота: | Размер: 490 KiB |
|
После Ширина: | Высота: | Размер: 139 KiB |
|
После Ширина: | Высота: | Размер: 188 KiB |
|
После Ширина: | Высота: | Размер: 500 KiB |
Двоичные данные
e2e-tests/playwright/specs/visual/common/login.spec.ts-snapshots/login-page-visual-check-free-edition-ipad-linux.png
Обычный файл
|
После Ширина: | Высота: | Размер: 135 KiB |
|
После Ширина: | Высота: | Размер: 214 KiB |
|
После Ширина: | Высота: | Размер: 515 KiB |
|
После Ширина: | Высота: | Размер: 171 KiB |
|
После Ширина: | Высота: | Размер: 211 KiB |
|
После Ширина: | Высота: | Размер: 512 KiB |
|
После Ширина: | Высота: | Размер: 169 KiB |
@@ -41,23 +41,25 @@ const Header = ({channel, isArchived, isMobile, onClose}: Props) => {
|
||||
/>
|
||||
</button>
|
||||
)}
|
||||
<HeaderTitle
|
||||
id='rhsPanelTitle'
|
||||
>
|
||||
<FormattedMessage
|
||||
id='channel_info_rhs.header.title'
|
||||
defaultMessage='Info'
|
||||
/>
|
||||
</HeaderTitle>
|
||||
<h2>
|
||||
<HeaderTitle
|
||||
id='rhsPanelTitle'
|
||||
>
|
||||
<FormattedMessage
|
||||
id='channel_info_rhs.header.title'
|
||||
defaultMessage='Info'
|
||||
/>
|
||||
</HeaderTitle>
|
||||
|
||||
{channel.display_name &&
|
||||
<span
|
||||
className='style--none sidebar--right__title__subtitle'
|
||||
>
|
||||
{isArchived && (<Icon className='icon icon-archive-outline'/>)}
|
||||
{channel.display_name}
|
||||
</span>
|
||||
}
|
||||
{channel.display_name &&
|
||||
<span
|
||||
className='style--none sidebar--right__title__subtitle'
|
||||
>
|
||||
{isArchived && (<Icon className='icon icon-archive-outline'/>)}
|
||||
{channel.display_name}
|
||||
</span>
|
||||
}
|
||||
</h2>
|
||||
</span>
|
||||
|
||||
<WithTooltip
|
||||
|
||||
@@ -39,23 +39,24 @@ const Header = ({channel, canGoBack, onClose, goBack}: Props) => {
|
||||
/>
|
||||
</button>
|
||||
)}
|
||||
<h2>
|
||||
<HeaderTitle
|
||||
id='rhsPanelTitle'
|
||||
>
|
||||
<FormattedMessage
|
||||
id='channel_members_rhs.header.title'
|
||||
defaultMessage='Members'
|
||||
/>
|
||||
</HeaderTitle>
|
||||
|
||||
<HeaderTitle
|
||||
id='rhsPanelTitle'
|
||||
>
|
||||
<FormattedMessage
|
||||
id='channel_members_rhs.header.title'
|
||||
defaultMessage='Members'
|
||||
/>
|
||||
</HeaderTitle>
|
||||
|
||||
{channel.display_name &&
|
||||
{channel.display_name &&
|
||||
<span
|
||||
className='style--none sidebar--right__title__subtitle'
|
||||
>
|
||||
{channel.display_name}
|
||||
</span>
|
||||
}
|
||||
}
|
||||
</h2>
|
||||
</span>
|
||||
|
||||
<WithTooltip
|
||||
|
||||
@@ -53,20 +53,22 @@ Object {
|
||||
<header
|
||||
class="mm-modal-header"
|
||||
>
|
||||
<h1
|
||||
<h2
|
||||
class="mm-modal-header__title"
|
||||
id="mm-modal-header-channelNotificationModalLabel"
|
||||
>
|
||||
Notification Preferences
|
||||
</h1>
|
||||
<div
|
||||
class="mm-modal-header__vertical-divider"
|
||||
/>
|
||||
<p
|
||||
class="mm-modal-header__subtitle"
|
||||
>
|
||||
channel_display_name
|
||||
</p>
|
||||
<span>
|
||||
Notification Preferences
|
||||
</span>
|
||||
<span
|
||||
class="mm-modal-header__vertical-divider"
|
||||
/>
|
||||
<span
|
||||
class="mm-modal-header__subtitle"
|
||||
>
|
||||
channel_display_name
|
||||
</span>
|
||||
</h2>
|
||||
</header>
|
||||
</h1>
|
||||
</div>
|
||||
@@ -535,20 +537,22 @@ Object {
|
||||
<header
|
||||
class="mm-modal-header"
|
||||
>
|
||||
<h1
|
||||
<h2
|
||||
class="mm-modal-header__title"
|
||||
id="mm-modal-header-channelNotificationModalLabel"
|
||||
>
|
||||
Notification Preferences
|
||||
</h1>
|
||||
<div
|
||||
class="mm-modal-header__vertical-divider"
|
||||
/>
|
||||
<p
|
||||
class="mm-modal-header__subtitle"
|
||||
>
|
||||
channel_display_name
|
||||
</p>
|
||||
<span>
|
||||
Notification Preferences
|
||||
</span>
|
||||
<span
|
||||
class="mm-modal-header__vertical-divider"
|
||||
/>
|
||||
<span
|
||||
class="mm-modal-header__subtitle"
|
||||
>
|
||||
channel_display_name
|
||||
</span>
|
||||
</h2>
|
||||
</header>
|
||||
</h1>
|
||||
</div>
|
||||
@@ -1177,20 +1181,22 @@ Object {
|
||||
<header
|
||||
class="mm-modal-header"
|
||||
>
|
||||
<h1
|
||||
<h2
|
||||
class="mm-modal-header__title"
|
||||
id="mm-modal-header-channelNotificationModalLabel"
|
||||
>
|
||||
Notification Preferences
|
||||
</h1>
|
||||
<div
|
||||
class="mm-modal-header__vertical-divider"
|
||||
/>
|
||||
<p
|
||||
class="mm-modal-header__subtitle"
|
||||
>
|
||||
channel_display_name
|
||||
</p>
|
||||
<span>
|
||||
Notification Preferences
|
||||
</span>
|
||||
<span
|
||||
class="mm-modal-header__vertical-divider"
|
||||
/>
|
||||
<span
|
||||
class="mm-modal-header__subtitle"
|
||||
>
|
||||
channel_display_name
|
||||
</span>
|
||||
</h2>
|
||||
</header>
|
||||
</h1>
|
||||
</div>
|
||||
@@ -1538,20 +1544,22 @@ Object {
|
||||
<header
|
||||
class="mm-modal-header"
|
||||
>
|
||||
<h1
|
||||
<h2
|
||||
class="mm-modal-header__title"
|
||||
id="mm-modal-header-channelNotificationModalLabel"
|
||||
>
|
||||
Notification Preferences
|
||||
</h1>
|
||||
<div
|
||||
class="mm-modal-header__vertical-divider"
|
||||
/>
|
||||
<p
|
||||
class="mm-modal-header__subtitle"
|
||||
>
|
||||
channel_display_name
|
||||
</p>
|
||||
<span>
|
||||
Notification Preferences
|
||||
</span>
|
||||
<span
|
||||
class="mm-modal-header__vertical-divider"
|
||||
/>
|
||||
<span
|
||||
class="mm-modal-header__subtitle"
|
||||
>
|
||||
channel_display_name
|
||||
</span>
|
||||
</h2>
|
||||
</header>
|
||||
</h1>
|
||||
</div>
|
||||
@@ -2118,20 +2126,22 @@ Object {
|
||||
<header
|
||||
class="mm-modal-header"
|
||||
>
|
||||
<h1
|
||||
<h2
|
||||
class="mm-modal-header__title"
|
||||
id="mm-modal-header-channelNotificationModalLabel"
|
||||
>
|
||||
Notification Preferences
|
||||
</h1>
|
||||
<div
|
||||
class="mm-modal-header__vertical-divider"
|
||||
/>
|
||||
<p
|
||||
class="mm-modal-header__subtitle"
|
||||
>
|
||||
channel_display_name
|
||||
</p>
|
||||
<span>
|
||||
Notification Preferences
|
||||
</span>
|
||||
<span
|
||||
class="mm-modal-header__vertical-divider"
|
||||
/>
|
||||
<span
|
||||
class="mm-modal-header__subtitle"
|
||||
>
|
||||
channel_display_name
|
||||
</span>
|
||||
</h2>
|
||||
</header>
|
||||
</h1>
|
||||
</div>
|
||||
@@ -2698,20 +2708,22 @@ Object {
|
||||
<header
|
||||
class="mm-modal-header"
|
||||
>
|
||||
<h1
|
||||
<h2
|
||||
class="mm-modal-header__title"
|
||||
id="mm-modal-header-channelNotificationModalLabel"
|
||||
>
|
||||
Notification Preferences
|
||||
</h1>
|
||||
<div
|
||||
class="mm-modal-header__vertical-divider"
|
||||
/>
|
||||
<p
|
||||
class="mm-modal-header__subtitle"
|
||||
>
|
||||
channel_display_name
|
||||
</p>
|
||||
<span>
|
||||
Notification Preferences
|
||||
</span>
|
||||
<span
|
||||
class="mm-modal-header__vertical-divider"
|
||||
/>
|
||||
<span
|
||||
class="mm-modal-header__subtitle"
|
||||
>
|
||||
channel_display_name
|
||||
</span>
|
||||
</h2>
|
||||
</header>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
@@ -14,7 +14,7 @@ import type {SuggestionProps} from 'components/suggestion/suggestion';
|
||||
|
||||
import ErrorBoundary from 'plugins/pluggable/error_boundary';
|
||||
|
||||
const SuggestionsHeader = styled.div`
|
||||
const SuggestionsHeader = styled.h2`
|
||||
margin-top: 16px;
|
||||
padding: 8px 24px;
|
||||
color: rgba(var(--center-channel-color-rgb), 0.56);
|
||||
@@ -22,6 +22,11 @@ const SuggestionsHeader = styled.div`
|
||||
line-height: 16px;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
margin-bottom: 0;
|
||||
|
||||
&& {
|
||||
font-family: 'Open Sans', sans-serif;
|
||||
}
|
||||
`;
|
||||
|
||||
const SuggestionsBody = styled.div`
|
||||
|
||||
@@ -25,6 +25,12 @@ const SearchHintsContainer = styled.div`
|
||||
margin-right: 8px;
|
||||
color: var(--center-channel-color-56);
|
||||
}
|
||||
h2 {
|
||||
all: inherit;
|
||||
display: inline;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
`;
|
||||
|
||||
const SearchFilter = styled.button`
|
||||
@@ -98,10 +104,12 @@ const SearchHints = ({onSelectFilter, searchType, searchTerms, searchTeam, hasSe
|
||||
return (
|
||||
<SearchHintsContainer id='searchHints'>
|
||||
<i className='icon icon-lightbulb-outline'/>
|
||||
<FormattedMessage
|
||||
id='search_hint.filter'
|
||||
defaultMessage='Filter your search with:'
|
||||
/>
|
||||
<h2>
|
||||
<FormattedMessage
|
||||
id='search_hint.filter'
|
||||
defaultMessage='Filter your search with:'
|
||||
/>
|
||||
</h2>
|
||||
{filters.map((filter) => (
|
||||
<SearchFilter
|
||||
key={filter.searchTerm}
|
||||
@@ -117,4 +125,3 @@ const SearchHints = ({onSelectFilter, searchType, searchTerms, searchTeam, hasSe
|
||||
};
|
||||
|
||||
export default SearchHints;
|
||||
|
||||
|
||||
@@ -20,7 +20,11 @@ exports[`components/post_edit_history should display error screen if errors are
|
||||
class="sidebar--right__title"
|
||||
id="rhsPanelTitle"
|
||||
>
|
||||
Edit History
|
||||
<h2
|
||||
id="rhsPanelTitle"
|
||||
>
|
||||
Edit History
|
||||
</h2>
|
||||
<div
|
||||
class="sidebar--right__title__channel"
|
||||
>
|
||||
@@ -184,7 +188,11 @@ exports[`components/post_edit_history should match snapshot 1`] = `
|
||||
class="sidebar--right__title"
|
||||
id="rhsPanelTitle"
|
||||
>
|
||||
Edit History
|
||||
<h2
|
||||
id="rhsPanelTitle"
|
||||
>
|
||||
Edit History
|
||||
</h2>
|
||||
<div
|
||||
class="sidebar--right__title__channel"
|
||||
>
|
||||
|
||||
@@ -150,7 +150,9 @@ const PostEditHistory = ({
|
||||
renderView={renderView}
|
||||
>
|
||||
<SearchResultsHeader>
|
||||
{title}
|
||||
<h2 id='rhsPanelTitle'>
|
||||
{title}
|
||||
</h2>
|
||||
<div className='sidebar--right__title__channel'>{channelDisplayName}</div>
|
||||
</SearchResultsHeader>
|
||||
{hasError ? errorContainer : postEditItems}
|
||||
|
||||
@@ -36,11 +36,11 @@ exports[`components/signup/Signup should match snapshot for all signup options e
|
||||
<div
|
||||
className="signup-body-card-content"
|
||||
>
|
||||
<p
|
||||
<h2
|
||||
className="signup-body-card-title"
|
||||
>
|
||||
Create your account with one of the following:
|
||||
</p>
|
||||
</h2>
|
||||
<div
|
||||
className="signup-body-card-form-login-options column"
|
||||
>
|
||||
@@ -106,11 +106,11 @@ exports[`components/signup/Signup should match snapshot for all signup options e
|
||||
<div
|
||||
className="signup-body-card-content"
|
||||
>
|
||||
<p
|
||||
<h2
|
||||
className="signup-body-card-title"
|
||||
>
|
||||
Create your account
|
||||
</p>
|
||||
</h2>
|
||||
<form
|
||||
className="signup-body-card-form"
|
||||
>
|
||||
@@ -275,11 +275,11 @@ exports[`components/signup/Signup should match snapshot for all signup options e
|
||||
<div
|
||||
className="signup-body-card-content"
|
||||
>
|
||||
<p
|
||||
<h2
|
||||
className="signup-body-card-title"
|
||||
>
|
||||
Create your account
|
||||
</p>
|
||||
</h2>
|
||||
<form
|
||||
className="signup-body-card-form"
|
||||
>
|
||||
|
||||
@@ -142,6 +142,7 @@
|
||||
box-shadow: none;
|
||||
|
||||
.signup-body-card-title {
|
||||
margin: 0;
|
||||
color: var(--center-channel-color);
|
||||
font-family: 'Metropolis';
|
||||
font-size: 22px;
|
||||
@@ -186,8 +187,7 @@
|
||||
@include mixins.primary-button;
|
||||
@include mixins.button-large;
|
||||
|
||||
width: 100%;
|
||||
margin-top: 30px;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -805,9 +805,9 @@ const Signup = ({onCustomizeHeader}: SignupProps) => {
|
||||
<div
|
||||
className='signup-body-card-content'
|
||||
>
|
||||
<p className='signup-body-card-title'>
|
||||
<h2 className='signup-body-card-title'>
|
||||
{getCardTitle()}
|
||||
</p>
|
||||
</h2>
|
||||
{enableCustomBrand && getMessageSubtitle()}
|
||||
{alertBanner && (
|
||||
<AlertBanner
|
||||
|
||||
@@ -211,9 +211,9 @@ export default class SuggestionList extends React.PureComponent<Props> {
|
||||
className='suggestion-list__divider'
|
||||
role='separator'
|
||||
>
|
||||
<span>
|
||||
<h2>
|
||||
<FormattedMessage id={id}/>
|
||||
</span>
|
||||
</h2>
|
||||
</li>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -19,9 +19,12 @@
|
||||
}
|
||||
|
||||
&__vertical-divider {
|
||||
display: inline-block;
|
||||
width: 1px;
|
||||
height: 24px;
|
||||
margin: 0 8px;
|
||||
background: rgba(var(--center-channel-color-rgb), 0.16);
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
&__subtitle {
|
||||
@@ -35,6 +38,7 @@
|
||||
font-weight: 400;
|
||||
line-height: 20px;
|
||||
text-overflow: ellipsis;
|
||||
vertical-align: middle;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,23 +16,23 @@ function ModalHeader({id, title, subtitle, handleClose}: Props) {
|
||||
const intl = useIntl();
|
||||
return (
|
||||
<header className='mm-modal-header'>
|
||||
<h1
|
||||
<h2
|
||||
id={`mm-modal-header-${id}`}
|
||||
className='mm-modal-header__title'
|
||||
>
|
||||
{title}
|
||||
</h1>
|
||||
<div className='mm-modal-header__vertical-divider'/>
|
||||
<p className='mm-modal-header__subtitle'>{subtitle}</p>
|
||||
{handleClose && <div className='mm-modal-header__ctr'>
|
||||
<button
|
||||
className='btn btn-icon'
|
||||
onClick={handleClose}
|
||||
aria-label={intl.formatMessage({id: 'modal.header_close', defaultMessage: 'Close'})}
|
||||
>
|
||||
<i className='icon icon-close'/>
|
||||
</button>
|
||||
</div>}
|
||||
<span>{title}</span>
|
||||
<span className='mm-modal-header__vertical-divider'/>
|
||||
<span className='mm-modal-header__subtitle'>{subtitle}</span>
|
||||
{handleClose && <div className='mm-modal-header__ctr'>
|
||||
<button
|
||||
className='btn btn-icon'
|
||||
onClick={handleClose}
|
||||
aria-label={intl.formatMessage({id: 'modal.header_close', defaultMessage: 'Close'})}
|
||||
>
|
||||
<i className='icon icon-close'/>
|
||||
</button>
|
||||
</div>}
|
||||
</h2>
|
||||
</header>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -152,6 +152,13 @@
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
|
||||
h2 {
|
||||
all: inherit;
|
||||
display: flex;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
&:first-child {
|
||||
&::before {
|
||||
display: none;
|
||||
|
||||