Setting page title on route change

Change-Id: I9c23d0215c7967eb3eff3a341ab3f210fb16a47a
diff --git a/src/app/core/index.ts b/src/app/core/index.ts
index 270541b..d93e627 100644
--- a/src/app/core/index.ts
+++ b/src/app/core/index.ts
@@ -6,6 +6,7 @@
 import {xosTable} from './table/table';
 import {RuntimeStates} from './services/runtime-states';
 import {NavigationService} from './services/navigation';
+import {PageTitle} from './services/page-title';
 
 export const xosCore = 'xosCore';
 
@@ -14,6 +15,7 @@
   .config(routesConfig)
   .provider('RuntimeStates', RuntimeStates)
   .service('NavigationService', NavigationService)
+  .service('PageTitle', PageTitle)
   .component('xosHeader', xosHeader)
   .component('xosFooter', xosFooter)
   .component('xosNav', xosNav)
diff --git a/src/app/core/services/page-title.ts b/src/app/core/services/page-title.ts
new file mode 100644
index 0000000..6f7e0c3
--- /dev/null
+++ b/src/app/core/services/page-title.ts
@@ -0,0 +1,33 @@
+import {StyleConfig} from '../../config/style.config';
+export interface IXosPageTitleService {
+  get(): string;
+  set(title: string): void;
+  formatStateName(stateName: string): string;
+}
+
+export class PageTitle {
+  static $inject = ['$window', '$transitions'];
+  constructor(
+    private $window: angular.IWindowService,
+    private $transitions: any // missing definition
+  ) {
+    console.log('page title');
+    this.$transitions.onSuccess({ to: '**' }, (transtion) => {
+      this.set(this.formatStateName(transtion.$to().name));
+    });
+  }
+
+  get() {
+    return this.$window.document.title;
+  }
+
+  set(title: string) {
+    this.$window.document.title = `${StyleConfig.projectName} - ${title}`;
+  }
+
+  private formatStateName(stateName: string): string {
+    // TODO pluralize and capitalize first letter only
+    return stateName.replace('xos.', '').toUpperCase();
+  }
+}
+