Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Limit card titles to two-lines with ellipsis/fade out #3241

Merged
merged 12 commits into from
Dec 5, 2018
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import { SelectPlanStepComponent } from '../select-plan-step/select-plan-step.co
import { SelectServiceComponent } from '../select-service/select-service.component';
import { SpecifyDetailsStepComponent } from '../specify-details-step/specify-details-step.component';
import { AddServiceInstanceComponent } from './add-service-instance.component';
import { MultilineTitleComponent } from '../../multiline-title/multiline-title.component';

describe('AddServiceInstanceComponent', () => {
let component: AddServiceInstanceComponent;
Expand Down Expand Up @@ -60,7 +61,8 @@ describe('AddServiceInstanceComponent', () => {
BooleanIndicatorComponent,
AppChipsComponent,
ApplicationStateIconComponent,
ApplicationStateIconPipe
ApplicationStateIconPipe,
MultilineTitleComponent
],
imports: [
PageHeaderModule,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import { CfServiceCardComponent } from '../../list/list-types/cf-services/cf-ser
import { ServiceIconComponent } from '../../service-icon/service-icon.component';
import { CsiGuidsService } from '../csi-guids.service';
import { SelectServiceComponent } from './select-service.component';
import { MultilineTitleComponent } from '../../multiline-title/multiline-title.component';

describe('SelectServiceComponent', () => {
let component: SelectServiceComponent;
Expand All @@ -42,7 +43,8 @@ describe('SelectServiceComponent', () => {
BooleanIndicatorComponent,
AppChipsComponent,
ApplicationStateIconComponent,
ApplicationStateIconPipe
ApplicationStateIconPipe,
MultilineTitleComponent
],
imports: [...BaseTestModulesNoShared],
providers: [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
flex: 1;
font-weight: 500;
margin-bottom: 16px;
overflow: hidden;
width: 100%;
&.meta-card__title-nomargin {
margin-bottom: 0;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
<app-meta-card class="app-card" [routerLink]="['/applications', row.entity.cfGuid , row.metadata.guid]" [status$]="appStatus$" [entityConfig]="entityConfig">
<app-meta-card-title>{{ row.entity.name }}</app-meta-card-title>
<app-meta-card-title>
<app-multiline-title>{{ row.entity.name }}</app-multiline-title>
</app-meta-card-title>
<app-meta-card-item>
<app-meta-card-key>State</app-meta-card-key>
<app-meta-card-value>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<app-meta-card class="buildpack-card">
<app-meta-card-title class="buildpack-card__title">
<div class="buildpack-card__title">
<div class="buildpack-card__title-name">{{ row.entity.name }}</div>
<app-multiline-title class="buildpack-card__title-name">{{ row.entity.name }}</app-multiline-title>
<app-dot-content class="buildpack-card__title-dot">{{ row.entity.position }}</app-dot-content>
</div>
</app-meta-card-title>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
flex-direction: row;
&-name {
align-items: baseline;
display: flex;
flex: 1;
flex-direction: row;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<app-meta-card class="org-card" [clickAction]="goToSummary" [entityConfig]="entityConfig" [actionMenu]="cardMenu">
<app-meta-card-title class="org-card__title">
<div class="org-card__title-link">{{ row.entity.name }}</div>
<app-multiline-title class="org-card__title-link">{{ row.entity.name }}</app-multiline-title>
</app-meta-card-title>
<app-meta-card-item>
<app-meta-card-key>Role</app-meta-card-key>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
.org-card {
&__title {
width: 100%;
&-link {
// Don't overlap title with 3-dot menu
margin-right: 16px;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
BaseTestModulesNoShared,
generateTestCfEndpointServiceProvider,
generateTestCfUserServiceProvider,
MetadataCardTestComponents,
} from '../../../../../../test-framework/cloud-foundry-endpoint-service.helper';
import { getInitialTestStoreState } from '../../../../../../test-framework/store-test-helper';
import { CfOrgSpaceDataService } from '../../../../../data-services/cf-org-space-service.service';
Expand All @@ -31,9 +32,7 @@ describe('CfOrgCardComponent', () => {

beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [CfOrgCardComponent, MetaCardComponent, MetaCardItemComponent,
MetaCardKeyComponent, ApplicationStateIconPipe, ApplicationStateIconComponent,
MetaCardTitleComponent, CardStatusComponent, MetaCardValueComponent],
declarations: [CfOrgCardComponent, MetadataCardTestComponents],
imports: [...BaseTestModulesNoShared],
providers: [
PaginationMonitorFactory,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<app-meta-card class="sec-group-card">
<app-meta-card-title class="sec-group-card__title">
<div class="sec-group-card__title-link">{{ row.entity.name }}</div>
<app-multiline-title class="sec-group-card__title-link">{{ row.entity.name }}</app-multiline-title>
</app-meta-card-title>
<app-meta-card-item>
<app-meta-card-key>Created</app-meta-card-key>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<app-meta-card class="service-card" [clickAction]="!disableCardClick ? goToServiceInstances:null" *ngIf="!!serviceEntity">
<app-meta-card-title noMargin="true">
<div class="service-card__title">
<div class="service-card__title__link">{{ getDisplayName() }}</div>
<app-multiline-title class="service-card__title__link">{{ getDisplayName() }}</app-multiline-title>
<app-service-icon [service]="serviceEntity"></app-service-icon>
</div>
</app-meta-card-title>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<app-meta-card class="space-card" [clickAction]="goToSummary" [entityConfig]="entityConfig" [actionMenu]="cardMenu">
<app-meta-card-title class="space-card__title">
<div class="space-card__title-link">{{ row.entity.name }}</div>
<app-multiline-title class="space-card__title-link">{{ row.entity.name }}</app-multiline-title>
</app-meta-card-title>
<app-meta-card-item>
<app-meta-card-key>Role</app-meta-card-key>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,9 @@
width: 100%;
&__title {
width: 100%;
&-link {
// Don't overlap title with 3-dot menu
margin-right: 16px;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<app-meta-card class="stack-card">
<app-meta-card-title class="stack-card__title">
<div class="stack-card__title-link">{{ row.entity.name }}</div>
<app-multiline-title class="stack-card__title-link">{{ row.entity.name }}</app-multiline-title>
</app-meta-card-title>
<app-meta-card-item>
<app-meta-card-key>Description</app-meta-card-key>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<app-meta-card *ngIf="serviceInstanceEntity" class="app-service-card" [actionMenu]="cardMenu" [entityConfig]="entityConfig">
<app-meta-card-title>
<div class="app-service-card__title">{{ serviceInstanceEntity.entity.name }}</div>
<app-multiline-title class="service-instance-card__title">{{ serviceInstanceEntity.entity.name }}</app-multiline-title>
</app-meta-card-title>
<app-meta-card-item>
<app-meta-card-key>Space</app-meta-card-key>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,8 @@
display: flex;
text-decoration: none;
}
&__title {
// Title should not overlap with 3-dot menu
margin-right: 16px;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<div class="app-multiline-title">
<ng-content></ng-content>
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
:host {
display: flex;
}

.app-multiline-title {
// Have to use the * comment format otherwise it does not work
/* autoprefixer: ignore next */
-webkit-box-orient: vertical;
display: -webkit-box;
-webkit-line-clamp: 2;
max-height: 2.4em;
overflow: hidden;
position: relative;
text-overflow: ellipsis;
width: 100;
word-break: break-all;
}

// Firefox does not support multi-line text ellipsis
// So fade out the end of the last line in the div
// Firefox only
@media screen and (min--moz-device-pixel-ratio:0) {
.app-multiline-title {
// Fade
&::after {
bottom: 0;
content: '';
height: 1.2em;
position: absolute;
right: 0;
text-align: right;
width: 48px;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';

import { MultilineTitleComponent } from './multiline-title.component';

describe('MultilineTitleComponent', () => {
let component: MultilineTitleComponent;
let fixture: ComponentFixture<MultilineTitleComponent>;

beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ MultilineTitleComponent ]
})
.compileComponents();
}));

beforeEach(() => {
fixture = TestBed.createComponent(MultilineTitleComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});

it('should create', () => {
expect(component).toBeTruthy();
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
@import '~@angular/material/theming';

@mixin app-multiline-title-theme($theme, $app-theme) {
// Firefox only
@media screen and (min--moz-device-pixel-ratio:0) {
$primary: map-get($theme, primary);
$background: mat-color($primary, 500);

.app-multiline-title {
// Fade
&::after {
background: linear-gradient(to right, rgba(255, 255, 255, 0), $background 70%);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { Component } from '@angular/core';

@Component({
selector: 'app-multiline-title',
templateUrl: './multiline-title.component.html',
styleUrls: ['./multiline-title.component.scss']
})
export class MultilineTitleComponent { }
2 changes: 2 additions & 0 deletions src/frontend/app/shared/shared.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ import { MomentModule } from 'ngx-moment';
import { MetricsRangeSelectorComponent } from './components/metrics-range-selector/metrics-range-selector.component';
import { MetricsParentRangeSelectorComponent } from './components/metrics-parent-range-selector/metrics-parent-range-selector.component';
import { MetricsRangeSelectorService } from './services/metrics-range-selector.service';
import { MultilineTitleComponent } from './components/multiline-title/multiline-title.component';

@NgModule({
imports: [
Expand Down Expand Up @@ -248,6 +249,7 @@ import { MetricsRangeSelectorService } from './services/metrics-range-selector.s
StartEndDateComponent,
MetricsRangeSelectorComponent,
MetricsParentRangeSelectorComponent,
MultilineTitleComponent,
],
exports: [
FormsModule,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import { AppState } from '../store/app-state';
import { CloudFoundrySpaceServiceMock } from './cloud-foundry-space.service.mock';
import { createBasicStoreModule, testSCFGuid } from './store-test-helper';
import { CfUserServiceTestProvider } from './user-service-helper';
import { MultilineTitleComponent } from '../shared/components/multiline-title/multiline-title.component';

export const cfEndpointServiceProviderDeps = [
EntityServiceFactory,
Expand Down Expand Up @@ -127,4 +128,4 @@ export const getCfSpaceServiceMock = {

export const MetadataCardTestComponents = [MetaCardComponent, MetaCardItemComponent,
MetaCardKeyComponent, ApplicationStateIconPipe, ApplicationStateIconComponent,
MetaCardTitleComponent, CardStatusComponent, MetaCardValueComponent];
MetaCardTitleComponent, CardStatusComponent, MetaCardValueComponent, MultilineTitleComponent];
2 changes: 2 additions & 0 deletions src/frontend/sass/_all-theme.scss
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
@import '../app/shared/components/start-end-date/start-end-date.component.theme';
@import '../app/shared/components/metrics-chart/metrics-chart.component.theme';
@import '../app/shared/components/metrics-range-selector/metrics-range-selector.component.theme';
@import '../app/shared/components/multiline-title/multiline-title.component.theme';
@import './components/mat-tabs.theme';
@import './components/text-status.theme';
@import './components/hyperlinks.theme';
Expand Down Expand Up @@ -111,6 +112,7 @@ $side-nav-light-active: #484848;
@include start-end-theme($theme, $app-theme);
@include metrics-chart-theme($theme, $app-theme);
@include metrics-range-selector-theme($theme, $app-theme);
@include app-multiline-title-theme($theme, $app-theme);
}

@function app-generate-nav-theme($theme, $nav-theme: null) {
Expand Down