diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts index 7eb9d96..f5ebd70 100644 --- a/src/app/app.component.spec.ts +++ b/src/app/app.component.spec.ts @@ -1,13 +1,13 @@ import {async, TestBed} from '@angular/core/testing'; -import { InjectionToken } from "@angular/core"; +import { InjectionToken } from '@angular/core'; import {AppComponent} from './app.component'; -import {ToolbarComponent} from "./toolbar/toolbar.component"; -import {RouterTestingModule} from "@angular/router/testing"; -import { MatSidenavModule } from "@angular/material/sidenav"; -import { MatToolbarModule } from "@angular/material/toolbar"; -import {NoopAnimationsModule} from "@angular/platform-browser/animations"; -import { RouterlessTracking } from "angulartics2"; -import { Angulartics2Piwik } from "angulartics2/piwik"; +import {ToolbarComponent} from './toolbar/toolbar.component'; +import {RouterTestingModule} from '@angular/router/testing'; +import { MatSidenavModule } from '@angular/material/sidenav'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import { RouterlessTracking } from 'angulartics2'; +import { Angulartics2Piwik } from 'angulartics2/piwik'; describe('AppComponent', () => { let piwik: Angulartics2Piwik; diff --git a/src/app/app.component.ts b/src/app/app.component.ts index c6eacb8..629df7e 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -43,7 +43,7 @@ export const routerTransition = trigger('routerTransition', [ }) export class AppComponent { constructor(private matomo: Angulartics2Piwik) { - matomo.startTracking() + matomo.startTracking(); } getState(outlet: RouterOutlet) { diff --git a/src/app/project-keyword.pipe.ts b/src/app/project-keyword.pipe.ts index f8e6603..21ab0b0 100644 --- a/src/app/project-keyword.pipe.ts +++ b/src/app/project-keyword.pipe.ts @@ -5,14 +5,24 @@ import {Pipe, PipeTransform} from '@angular/core'; }) export class ProjectKeywordPipe implements PipeTransform { private keywords = [ - 'MySQL', 'Node', 'Express', 'RxJava', 'Dagger 2', 'Model View Presenter', 'Retrofit', 'Realm', 'Room', 'Model-View-View Model', 'SimpleStack' + 'MySQL', + 'Node', + 'Express', + 'RxJava', + 'Dagger 2', + 'Model View Presenter', + 'Retrofit', + 'Realm', + 'Room', + 'Model-View-View Model', + 'SimpleStack' ]; transform(value: String, args?: any): any { this.keywords.forEach(keyword => { - let keywordIndex = value.indexOf(keyword); - if (keywordIndex != -1) { - let boldKeyword = '' + value.substring(keywordIndex, keywordIndex + keyword.length) + ''; + const keywordIndex = value.indexOf(keyword); + if (keywordIndex !== -1) { + const boldKeyword = '' + value.substring(keywordIndex, keywordIndex + keyword.length) + ''; value = value.replace(keyword, boldKeyword); } }); diff --git a/src/app/projects/project-item.ts b/src/app/projects/project-item.ts index a79ec52..60125af 100644 --- a/src/app/projects/project-item.ts +++ b/src/app/projects/project-item.ts @@ -1,6 +1,6 @@ export class ProjectItem { title: String; applicationType: String; - description: String - imgLocation: String + description: String; + imgLocation: String; } diff --git a/src/app/projects/project.service.ts b/src/app/projects/project.service.ts index 454d69b..38015a8 100644 --- a/src/app/projects/project.service.ts +++ b/src/app/projects/project.service.ts @@ -1,5 +1,50 @@ import {Injectable} from '@angular/core'; -import {ProjectItem} from "./project-item"; +import {ProjectItem} from './project-item'; + +const projects = [ + { + title: 'Movies', + applicationType: 'Android Application (Kotlin)', + // tslint:disable-next-line:max-line-length + description: 'Movies is an Android application for viewing movie and TV show info using the TMDB API. Movies is a Single Activity application, leveraging Model-View-View Model, Dagger 2, RxJava and SimpleStack for navigation. There is a focus on caching and a pleasant user experience even on slower networks by combining both in-memory and disk caching for quick load times, especially after a show details have been viewed.', + imgLocation: '' + }, + { + title: 'Secure Notes', + applicationType: 'Android Application (Kotlin)', + // tslint:disable-next-line:max-line-length + description: 'Secure Notes is a simple note taking application with security in mind. There is a focus on clean' + + ' code, Model-View-View Model and loosely coupled components. I built this app to experiment with different' + + ' Android database libraries (Realm and Room), encryption and security, as well as a single Activity approach to' + + ' an Android app. (Under development).', + imgLocation: '../../assets/note-icon.png' + }, + { + title: 'CorpsTime', + applicationType: 'Android Application (Java and Kotlin)', + description: 'CorpsTime is an Android application to view news, scores and the schedule of Drum Corps International' + + ' competitions. CorpsTime uses the Model View Presenter pattern and libraries such as Dagger 2, Retrofit and RxJava.', + imgLocation: '../../assets/corpstime.png' + }, + { + title: 'CorpsTime Scraper and API', + applicationType: 'Express API powered by Node (Javascript)', + description: 'The CorpsTime scraper and API is the supporting code for the CorpsTime mobile application, written' + + ' in Javascript using Express, Node, and MySQL to gather and prepare data for the CorpsTime client. The scraper' + + ' runs nightly during the Drum Corps season to pull data from different websites and store and format it to be' + + ' later retrieved by the API. The API includes a handful of endpoints to get scores, different competing corps and' + + ' the upcoming events during the season.', + imgLocation: '' + }, + { + title: 'Android Hues', + applicationType: 'Android Application (Kotlin)', + // tslint:disable-next-line:max-line-length + description: 'Android Hues is an Android application to control your Phillips Hue lights at home. Hues uses RxJava,' + + ' Dagger 2 and the Phillips Hue SDK in order to control the color, brightness and power state of your lights.', + imgLocation: '../../assets/android-hues.png' + } +]; @Injectable({ providedIn: 'root' @@ -10,48 +55,7 @@ export class ProjectService { } getProjects(): Promise> { - return Promise.resolve(projects) + return Promise.resolve(projects); } } -const projects = [ - { - title: "Movies", - applicationType: "Android Application (Kotlin)", - description: "Movies is an Android application for viewing movie and TV show info using the TMDB API. Movies is a Single Activity application, leveraging Model-View-View Model, Dagger 2, RxJava and SimpleStack for navigation. There is a focus on caching and a pleasant user experience even on slower networks by combining both in-memory and disk caching for quick load times, especially after a show details have been viewed.", - imgLocation: "" - }, - { - title: "Secure Notes", - applicationType: "Android Application (Kotlin)", - description: "Secure Notes is a simple note taking application with security in mind. There is a focus on clean" + - " code, Model-View-View Model and loosely coupled components. I built this app to experiment with different" + - " Android database libraries (Realm and Room), encryption and security, as well as a single Activity approach to" + - " an Android app. (Under development).", - imgLocation: "../../assets/note-icon.png" - }, - { - title: "CorpsTime", - applicationType: "Android Application (Java and Kotlin)", - description: "CorpsTime is an Android application to view news, scores and the schedule of Drum Corps International" + - " competitions. CorpsTime uses the Model View Presenter pattern and libraries such as Dagger 2, Retrofit and RxJava.", - imgLocation: "../../assets/corpstime.png" - }, - { - title: "CorpsTime Scraper and API", - applicationType: "Express API powered by Node (Javascript)", - description: "The CorpsTime scraper and API is the supporting code for the CorpsTime mobile application, written" + - " in Javascript using Express, Node, and MySQL to gather and prepare data for the CorpsTime client. The scraper" + - " runs nightly during the Drum Corps season to pull data from different websites and store and format it to be" + - " later retrieved by the API. The API includes a handful of endpoints to get scores, different competing corps and" + - " the upcoming events during the season.", - imgLocation: "" - }, - { - title: "Android Hues", - applicationType: "Android Application (Kotlin)", - description: "Android Hues is an Android application to control your Phillips Hue lights at home. Hues uses RxJava," + - " Dagger 2 and the Phillips Hue SDK in order to control the color, brightness and power state of your lights.", - imgLocation: "../../assets/android-hues.png" - } -]; diff --git a/src/app/projects/projects.component.spec.ts b/src/app/projects/projects.component.spec.ts index 939349b..853ddb4 100644 --- a/src/app/projects/projects.component.spec.ts +++ b/src/app/projects/projects.component.spec.ts @@ -1,7 +1,7 @@ import {async, ComponentFixture, TestBed} from '@angular/core/testing'; import {ProjectsComponent} from './projects.component'; -import {ProjectKeywordPipe} from "../project-keyword.pipe"; +import {ProjectKeywordPipe} from '../project-keyword.pipe'; describe('ProjectsComponent', () => { let component: ProjectsComponent; diff --git a/src/app/toolbar/toolbar.component.spec.ts b/src/app/toolbar/toolbar.component.spec.ts index 1a1f4b9..ebbf1a1 100644 --- a/src/app/toolbar/toolbar.component.spec.ts +++ b/src/app/toolbar/toolbar.component.spec.ts @@ -1,10 +1,10 @@ import {async, ComponentFixture, TestBed} from '@angular/core/testing'; import {ToolbarComponent} from './toolbar.component'; -import { MatSidenavModule } from "@angular/material/sidenav"; -import { MatToolbarModule } from "@angular/material/toolbar"; -import {RouterTestingModule} from "@angular/router/testing"; -import {Component} from "@angular/core"; +import { MatSidenavModule } from '@angular/material/sidenav'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import {RouterTestingModule} from '@angular/router/testing'; +import {Component} from '@angular/core'; @Component({template: ''}) class DummyComponent { @@ -36,12 +36,12 @@ describe('ToolbarComponent', () => { }); it('should contain a material toolbar', () => { - expect(fixture.debugElement.children[0].nativeElement.className).toBe("mat-drawer-container mat-sidenav-container") + expect(fixture.debugElement.children[0].nativeElement.className).toBe('mat-drawer-container mat-sidenav-container'); }); it('should contain 4 links, Home, Resume, Projects, Contact', () => { - let debugElements = fixture.debugElement.queryAll((element) => { - return element.nativeElement.className.indexOf("mat-toolbar") != -1; + const debugElements = fixture.debugElement.queryAll((element) => { + return element.nativeElement.className.indexOf('mat-toolbar') !== -1; }); expect(debugElements[0].children.length).toBe(4);