* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
+.navbar-context-justified {
+ display: flex;
+ justify-content: space-between;
+}
+
.navbar-context-branches {
display: inline-flex;
justify-content: center;
+ flex-shrink: 1 !important;
+ min-width: 0;
line-height: calc(2 * var(--gridSize));
margin-left: calc(2 * var(--gridSize));
font-size: var(--baseFontSize);
}
return (
<ContextNavBar
- id="context-navigation"
height={notifComponent ? theme.contextNavHeightRaw + 20 : theme.contextNavHeightRaw}
+ id="context-navigation"
notif={notifComponent}>
- <ComponentNavHeader
- branchLikes={this.props.branchLikes}
- component={this.props.component}
- currentBranchLike={this.props.currentBranchLike}
- // to close dropdown on any location change
- location={this.props.location}
- />
- <ComponentNavMeta
- branchLike={this.props.currentBranchLike}
- component={this.props.component}
- />
+ <div className="navbar-context-justified">
+ <ComponentNavHeader
+ branchLikes={this.props.branchLikes}
+ component={this.props.component}
+ currentBranchLike={this.props.currentBranchLike}
+ // to close dropdown on any location change
+ location={this.props.location}
+ />
+ <ComponentNavMeta
+ branchLike={this.props.currentBranchLike}
+ component={this.props.component}
+ />
+ </div>
<ComponentNavMenu
branchLike={this.props.currentBranchLike}
component={this.props.component}
const { currentBranchLike } = this.props;
if (isShortLivingBranch(currentBranchLike)) {
return currentBranchLike.isOrphan ? (
- <span className="note big-spacer-left">
+ <span className="note big-spacer-left text-ellipsis flex-shrink">
{translate('branches.orphan_branch')}
<Tooltip overlay={translate('branches.orphan_branches.tooltip')}>
<i className="icon-help spacer-left" />
);
} else if (isPullRequest(currentBranchLike)) {
return (
- <span className="note big-spacer-left">
+ <span className="note big-spacer-left text-ellipsis flex-shrink">
<FormattedMessage
defaultMessage={translate('branches.pull_request.for_merge_into_x_from_y')}
id="branches.pull_request.for_merge_into_x_from_y"
className={classNames('navbar-context-branches', 'dropdown', {
open: this.state.dropdownOpen
})}>
- <a className="link-base-color link-no-underline" href="#" onClick={this.handleClick}>
+ <a className="link-base-color link-no-underline nowrap" href="#" onClick={this.handleClick}>
<BranchIcon branchLike={currentBranchLike} className="little-spacer-right" />
<Tooltip mouseEnterDelay={1} overlay={displayName}>
<span className="text-limited text-top">{displayName}</span>
return (
<header className="navbar-context-header">
<OrganizationHelmet
- title={component.name}
organization={organization && shouldOrganizationBeDisplayed ? organization : undefined}
+ title={component.name}
/>
{organization &&
shouldOrganizationBeDisplayed && (
<>
<OrganizationAvatar organization={organization} />
<OrganizationLink
- organization={organization}
- className="link-base-color link-no-underline spacer-left">
+ className="navbar-context-header-breadcrumb-link link-base-color link-no-underline spacer-left"
+ organization={organization}>
{organization.name}
</OrganizationLink>
<span className="slash-separator" />
<React.Fragment key={item.key}>
{index === 0 && <QualifierIcon className="spacer-right" qualifier={lastItem.qualifier} />}
<Link
- className="link-base-color link-no-underline"
+ className="navbar-context-header-breadcrumb-link link-base-color link-no-underline"
title={item.name}
to={getProjectUrl(item.key)}>
{itemName}
return (
<div className="navbar-context-meta">
{component.analysisDate && (
- <div className="spacer-left">
+ <div className="spacer-left text-ellipsis">
<DateTimeFormatter date={component.analysisDate} />
</div>
)}
height={72}
id="context-navigation"
>
- <Connect(ComponentNavHeader)
- branchLikes={Array []}
- component={
- Object {
- "breadcrumbs": Array [
- Object {
- "key": "component",
- "name": "component",
- "qualifier": "TRK",
- },
- ],
- "key": "component",
- "name": "component",
- "organization": "org",
- "qualifier": "TRK",
+ <div
+ className="navbar-context-justified"
+ >
+ <Connect(ComponentNavHeader)
+ branchLikes={Array []}
+ component={
+ Object {
+ "breadcrumbs": Array [
+ Object {
+ "key": "component",
+ "name": "component",
+ "qualifier": "TRK",
+ },
+ ],
+ "key": "component",
+ "name": "component",
+ "organization": "org",
+ "qualifier": "TRK",
+ }
}
- }
- location={Object {}}
- />
- <Connect(ComponentNavMeta)
- component={
- Object {
- "breadcrumbs": Array [
- Object {
- "key": "component",
- "name": "component",
- "qualifier": "TRK",
- },
- ],
- "key": "component",
- "name": "component",
- "organization": "org",
- "qualifier": "TRK",
+ location={Object {}}
+ />
+ <Connect(ComponentNavMeta)
+ component={
+ Object {
+ "breadcrumbs": Array [
+ Object {
+ "key": "component",
+ "name": "component",
+ "qualifier": "TRK",
+ },
+ ],
+ "key": "component",
+ "name": "component",
+ "organization": "org",
+ "qualifier": "TRK",
+ }
}
- }
- />
+ />
+ </div>
<ComponentNavMenu
component={
Object {
className="navbar-context-branches dropdown"
>
<a
- className="link-base-color link-no-underline"
+ className="link-base-color link-no-underline nowrap"
href="#"
onClick={[Function]}
>
className="navbar-context-branches dropdown"
>
<a
- className="link-base-color link-no-underline"
+ className="link-base-color link-no-underline nowrap"
href="#"
onClick={[Function]}
>
/>
</a>
<span
- className="note big-spacer-left"
+ className="note big-spacer-left text-ellipsis flex-shrink"
>
<FormattedMessage
defaultMessage="branches.pull_request.for_merge_into_x_from_y"
className="navbar-context-branches dropdown"
>
<a
- className="link-base-color link-no-underline"
+ className="link-base-color link-no-underline nowrap"
href="#"
onClick={[Function]}
>
qualifier="TRK"
/>
<Link
- className="link-base-color link-no-underline"
+ className="navbar-context-header-breadcrumb-link link-base-color link-no-underline"
onlyActiveOnIndex={false}
style={Object {}}
title="My Project"
}
/>
<OrganizationLink
- className="link-base-color link-no-underline spacer-left"
+ className="navbar-context-header-breadcrumb-link link-base-color link-no-underline spacer-left"
organization={
Object {
"key": "foo",
qualifier="TRK"
/>
<Link
- className="link-base-color link-no-underline"
+ className="navbar-context-header-breadcrumb-link link-base-color link-no-underline"
onlyActiveOnIndex={false}
style={Object {}}
title="My Project"
className="navbar-context-meta"
>
<div
- className="spacer-left"
+ className="spacer-left text-ellipsis"
>
<DateTimeFormatter
date="2017-01-02T00:00:00.000Z"
className="navbar-context-meta"
>
<div
- className="spacer-left"
+ className="spacer-left text-ellipsis"
>
<DateTimeFormatter
date="2017-01-02T00:00:00.000Z"
className="navbar-context-meta"
>
<div
- className="spacer-left"
+ className="spacer-left text-ellipsis"
>
<DateTimeFormatter
date="2017-01-02T00:00:00.000Z"
flex: 1;
}
+.flex-shrink {
+ flex-shrink: 1;
+ min-width: 0;
+}
+
.space-between {
justify-content: space-between !important;
}
border-bottom: none;
}
+/* use `min-width: 0` to cut breadcrumb links (to end with "...") */
+/* https://stackoverflow.com/questions/38223879/white-space-nowrap-breaks-flexbox-layout */
.navbar-context-header {
display: flex;
align-items: center;
+ min-width: 0;
height: calc(4 * var(--gridSize));
font-size: var(--bigFontSize);
}
+/* disallow icons and slash separators to shrink */
+.navbar-context-header > *:not(.navbar-context-header-breadcrumb-link) {
+ flex-shrink: 0;
+}
+
+.navbar-context-header-breadcrumb-link {
+ min-width: 0;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
.navbar-context-header .slash-separator {
margin-left: var(--gridSize);
margin-right: var(--gridSize);
color: rgba(68, 68, 68, 0.2);
}
+/* set `min-width: 0` to allow flexbox item to shrink */
+/* https://stackoverflow.com/questions/38223879/white-space-nowrap-breaks-flexbox-layout */
.navbar-context-meta {
- position: absolute;
- top: 0;
- right: 0;
display: flex;
align-items: center;
+ min-width: 0;
height: calc(4 * var(--gridSize));
- padding: 0 20px;
+ padding-left: 20px;
color: var(--secondFontColor);
font-size: var(--smallFontSize);
text-align: right;