diff --git a/src/app/team/member.component.html b/src/app/team/member.component.html new file mode 100644 index 00000000..14420091 --- /dev/null +++ b/src/app/team/member.component.html @@ -0,0 +1,21 @@ + + + + + {{member.name}} + {{member.role}} + + + +

+ {{member.bio}} +

+
+ + + + +
diff --git a/src/app/team/member.component.scss b/src/app/team/member.component.scss new file mode 100644 index 00000000..519c2db3 --- /dev/null +++ b/src/app/team/member.component.scss @@ -0,0 +1,17 @@ +.mat-card { + width: 210px; + margin: 10px; +} + +.header-image { + background-size: cover; +} + +.mat-card-actions { + text-align: center; + margin-bottom: 1px; +} + +.mat-card-title { + font-size: 20px; +} diff --git a/src/app/team/member.component.spec.ts b/src/app/team/member.component.spec.ts new file mode 100644 index 00000000..6a0aeed2 --- /dev/null +++ b/src/app/team/member.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MemberComponent } from './member.component'; + +describe('MemberComponent', () => { + let component: MemberComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ MemberComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(MemberComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/team/member.component.ts b/src/app/team/member.component.ts new file mode 100644 index 00000000..e7e6d952 --- /dev/null +++ b/src/app/team/member.component.ts @@ -0,0 +1,12 @@ +import { Component, Input } from '@angular/core'; + +import { IMember } from './team.models'; + +@Component({ + selector: 'app-member', + templateUrl: './member.component.html', + styleUrls: ['./member.component.scss'] +}) +export class MemberComponent{ + @Input() member: IMember; +} diff --git a/src/app/team/social-sharing/social-sharing.component.html b/src/app/team/social-sharing/social-sharing.component.html new file mode 100644 index 00000000..1e6a2ce0 --- /dev/null +++ b/src/app/team/social-sharing/social-sharing.component.html @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/app/team/social-sharing/social-sharing.component.scss b/src/app/team/social-sharing/social-sharing.component.scss new file mode 100644 index 00000000..c9ca3717 --- /dev/null +++ b/src/app/team/social-sharing/social-sharing.component.scss @@ -0,0 +1,18 @@ +@import "../../../styles/colors"; + +a.mat-button { + font-size: 25px; +} + +.icon-github { + color: $icon-color-github; +} + +.icon-twitter { + color: $icon-color-twitter; + +} + +.icon-linkedin { + color: $icon-color-linkedin; +} diff --git a/src/app/team/social-sharing/social-sharing.component.spec.ts b/src/app/team/social-sharing/social-sharing.component.spec.ts new file mode 100644 index 00000000..b496dcaf --- /dev/null +++ b/src/app/team/social-sharing/social-sharing.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SocialSharingComponent } from './social-sharing.component'; + +describe('SocialSharingComponent', () => { + let component: SocialSharingComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ SocialSharingComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(SocialSharingComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/team/social-sharing/social-sharing.component.ts b/src/app/team/social-sharing/social-sharing.component.ts new file mode 100644 index 00000000..fe779d26 --- /dev/null +++ b/src/app/team/social-sharing/social-sharing.component.ts @@ -0,0 +1,12 @@ +import { Component, Input } from '@angular/core'; + +@Component({ + selector: 'app-social-sharing', + templateUrl: './social-sharing.component.html', + styleUrls: ['./social-sharing.component.scss'] +}) +export class SocialSharingComponent { + @Input() githubUrl: string; + @Input() twitterUrl: string; + @Input() linkedinUrl: string; +} diff --git a/src/app/team/team.component.html b/src/app/team/team.component.html index 9bbb6ce4..2dafbeb2 100644 --- a/src/app/team/team.component.html +++ b/src/app/team/team.component.html @@ -1,3 +1,15 @@ -

- team works! -

+
+

Core team

+
+ + +
+
+ +
+

Learning team

+
+ + +
+
diff --git a/src/app/team/team.component.scss b/src/app/team/team.component.scss index e69de29b..9d5730f6 100644 --- a/src/app/team/team.component.scss +++ b/src/app/team/team.component.scss @@ -0,0 +1,22 @@ +:host { + display: block; + max-width: 1000px; + margin: 0 auto; +} + +h2 { + text-align: center; + margin: 0; + padding: 20px; +} + +section.wrapper { + display: flex; + flex-flow: row wrap; + justify-content: center; +} + +div.team-section { + box-shadow: -1px 3px 5px 0px #d6d6d6; + margin-bottom: 3px; +} diff --git a/src/app/team/team.component.ts b/src/app/team/team.component.ts index e83fbc24..8d87e5a1 100644 --- a/src/app/team/team.component.ts +++ b/src/app/team/team.component.ts @@ -1,10 +1,22 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; +import { Observable } from 'rxjs/Observable'; + +import { TeamService } from './team.service'; +import { ITeam } from './team.models'; @Component({ selector: 'app-team', templateUrl: './team.component.html', styleUrls: ['./team.component.scss'] }) -export class TeamComponent { - constructor() {} +export class TeamComponent implements OnInit { + team$: Observable; + + constructor( + private service: TeamService + ) {} + + ngOnInit() { + this.team$ = this.service.getTeam(); + } } diff --git a/src/app/team/team.models.ts b/src/app/team/team.models.ts new file mode 100644 index 00000000..dbf68dde --- /dev/null +++ b/src/app/team/team.models.ts @@ -0,0 +1,14 @@ +export interface ITeam { + coreTeam: IMember[]; + learningTeam: IMember[]; +} + +export interface IMember { + name: string; + role: string; + githubUrl: string; + avatar: string; + twitterUrl: string; + linkedinUrl: string; + bio: string; +} diff --git a/src/app/team/team.module.ts b/src/app/team/team.module.ts index 4089c977..f940a1b2 100644 --- a/src/app/team/team.module.ts +++ b/src/app/team/team.module.ts @@ -1,10 +1,27 @@ import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { + MatCardModule, + MatButtonModule, + MatIconModule, +} from '@angular/material'; -import { TeamComponent } from './team.component'; import { TeamRoutingModule } from './team-routing.module'; +import { TeamComponent } from './team.component'; +import { TeamService } from './team.service'; +import { MemberComponent } from './member.component'; +import { SocialSharingComponent } from './social-sharing/social-sharing.component'; @NgModule({ - imports: [TeamRoutingModule], - declarations: [TeamComponent] + imports: [ + TeamRoutingModule, + CommonModule, + MatCardModule, + MatButtonModule, + MatIconModule + ], + providers: [TeamService], + declarations: [TeamComponent, MemberComponent, SocialSharingComponent] }) export class TeamModule {} diff --git a/src/app/team/team.service.spec.ts b/src/app/team/team.service.spec.ts new file mode 100644 index 00000000..42ce51ec --- /dev/null +++ b/src/app/team/team.service.spec.ts @@ -0,0 +1,15 @@ +import { TestBed, inject } from '@angular/core/testing'; + +import { TeamService } from './team.service'; + +describe('TeamService', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [TeamService] + }); + }); + + it('should be created', inject([TeamService], (service: TeamService) => { + expect(service).toBeTruthy(); + })); +}); diff --git a/src/app/team/team.service.ts b/src/app/team/team.service.ts new file mode 100644 index 00000000..0ccb8fcb --- /dev/null +++ b/src/app/team/team.service.ts @@ -0,0 +1,103 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/observable/from'; + +import { ITeam, IMember } from './team.models'; + +@Injectable() +export class TeamService { + getTeam(): Observable { + return Observable.from([{ + coreTeam: [{ + 'name': 'Ben Lesh', + 'role': 'Developer', + 'githubUrl': 'https://github.com/benlesh', + 'avatar': 'https://github.com/benlesh.png', + 'twitterUrl': 'https://twitter.com/BenLesh', + 'linkedinUrl': 'https://www.linkedin.com/in/blesh/', + 'bio': + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. ' + + 'Sed est odio, sodales et tellus a, semper pellentesque elit. ' + + 'Mauris purus dui, dignissim nec sodales ut, feugiat et purus.' + }, { + 'name': 'Ben Lesh', + 'role': 'Developer', + 'githubUrl': 'https://github.com/benlesh', + 'avatar': 'https://github.com/benlesh.png', + 'twitterUrl': 'https://twitter.com/BenLesh', + 'linkedinUrl': 'https://www.linkedin.com/in/blesh/', + 'bio': + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. ' + + 'Sed est odio, sodales et tellus a, semper pellentesque elit. ' + + 'Mauris purus dui, dignissim nec sodales ut, feugiat et purus.' + }, { + 'name': 'Ben Lesh', + 'role': 'Developer', + 'githubUrl': 'https://github.com/benlesh', + 'avatar': 'https://github.com/benlesh.png', + 'twitterUrl': 'https://twitter.com/BenLesh', + 'linkedinUrl': 'https://www.linkedin.com/in/blesh/', + 'bio': + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. ' + + 'Sed est odio, sodales et tellus a, semper pellentesque elit. ' + + 'Mauris purus dui, dignissim nec sodales ut, feugiat et purus.' + }, { + 'name': 'Ben Lesh', + 'role': 'Developer', + 'githubUrl': 'https://github.com/benlesh', + 'avatar': 'https://github.com/benlesh.png', + 'twitterUrl': 'https://twitter.com/BenLesh', + 'linkedinUrl': 'https://www.linkedin.com/in/blesh/', + 'bio': + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. ' + + 'Sed est odio, sodales et tellus a, semper pellentesque elit. ' + + 'Mauris purus dui, dignissim nec sodales ut, feugiat et purus.' + }], + learningTeam: [{ + 'name': 'Ben Lesh', + 'role': 'Developer', + 'githubUrl': 'https://github.com/benlesh', + 'avatar': 'https://github.com/benlesh.png', + 'twitterUrl': 'https://twitter.com/BenLesh', + 'linkedinUrl': 'https://www.linkedin.com/in/blesh/', + 'bio': + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. ' + + 'Sed est odio, sodales et tellus a, semper pellentesque elit. ' + + 'Mauris purus dui, dignissim nec sodales ut, feugiat et purus.' + }, { + 'name': 'Ben Lesh', + 'role': 'Developer', + 'githubUrl': 'https://github.com/benlesh', + 'avatar': 'https://github.com/benlesh.png', + 'twitterUrl': 'https://twitter.com/BenLesh', + 'linkedinUrl': 'https://www.linkedin.com/in/blesh/', + 'bio': + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. ' + + 'Sed est odio, sodales et tellus a, semper pellentesque elit. ' + + 'Mauris purus dui, dignissim nec sodales ut, feugiat et purus.' + }, { + 'name': 'Ben Lesh', + 'role': 'Developer', + 'githubUrl': 'https://github.com/benlesh', + 'avatar': 'https://github.com/benlesh.png', + 'twitterUrl': 'https://twitter.com/BenLesh', + 'linkedinUrl': 'https://www.linkedin.com/in/blesh/', + 'bio': + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. ' + + 'Sed est odio, sodales et tellus a, semper pellentesque elit. ' + + 'Mauris purus dui, dignissim nec sodales ut, feugiat et purus.' + }, { + 'name': 'Ben Lesh', + 'role': 'Developer', + 'githubUrl': 'https://github.com/benlesh', + 'avatar': 'https://github.com/benlesh.png', + 'twitterUrl': 'https://twitter.com/BenLesh', + 'linkedinUrl': 'https://www.linkedin.com/in/blesh/', + 'bio': + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. ' + + 'Sed est odio, sodales et tellus a, semper pellentesque elit. ' + + 'Mauris purus dui, dignissim nec sodales ut, feugiat et purus.' + }] + }]); + } +} diff --git a/src/assets/fonts/icomoon.woff b/src/assets/fonts/icomoon.woff new file mode 100644 index 00000000..5f98b0ad Binary files /dev/null and b/src/assets/fonts/icomoon.woff differ diff --git a/src/styles.scss b/src/styles.scss index 5030d9c6..507f884f 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -1,6 +1,7 @@ @import '~@angular/material/theming'; @import './app/operators/operator-theme'; @import './styles/code-helpers'; +@import './styles/icons'; @include mat-core(); // Define the theme. diff --git a/src/styles/_colors.scss b/src/styles/_colors.scss new file mode 100644 index 00000000..d02fac6f --- /dev/null +++ b/src/styles/_colors.scss @@ -0,0 +1,3 @@ +$icon-color-github: #6f066f; +$icon-color-twitter: #4073d4; +$icon-color-linkedin: #3D7CA4; diff --git a/src/styles/_icons.scss b/src/styles/_icons.scss new file mode 100644 index 00000000..66071de8 --- /dev/null +++ b/src/styles/_icons.scss @@ -0,0 +1,31 @@ +@font-face { + font-family: 'icomoon'; + src: url('assets/fonts/icomoon.woff?6yfful') format('woff'); + font-weight: normal; + font-style: normal; +} + +[class^="icon-"], [class*=" icon-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'icomoon' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-linkedin:before { + content: "\f08c"; +} +.icon-twitter:before { + content: "\f099"; +} +.icon-github:before { + content: "\f09b"; +}