{"version":3,"sources":["webpack:///./src/$_lazy_route_resource lazy namespace object","webpack:///./src/app/app.component.css","webpack:///./src/app/app.component.html","webpack:///./src/app/app.component.ts","webpack:///./src/app/app.module.ts","webpack:///./src/app/app.routing.ts","webpack:///./src/app/layouts/admin-layout/admin-layout.component.html","webpack:///./src/app/layouts/admin-layout/admin-layout.component.scss","webpack:///./src/app/layouts/admin-layout/admin-layout.component.ts","webpack:///./src/app/services/resident.service.ts","webpack:///./src/app/shared/footer/footer.component.html","webpack:///./src/app/shared/footer/footer.component.ts","webpack:///./src/app/shared/footer/footer.module.ts","webpack:///./src/app/shared/navbar/navbar.component.html","webpack:///./src/app/shared/navbar/navbar.component.ts","webpack:///./src/app/shared/navbar/navbar.module.ts","webpack:///./src/app/sidebar/sidebar.component.html","webpack:///./src/app/sidebar/sidebar.component.ts","webpack:///./src/app/sidebar/sidebar.module.ts","webpack:///./src/environments/environment.ts","webpack:///./src/main.ts","webpack:///./src/modules/types.ts","webpack:///./src/modules/util.ts"],"names":[],"mappings":"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","file":"main.js","sourcesContent":["var map = {\n\t\"./layouts/admin-layout/admin-layout.module\": [\n\t\t\"./src/app/layouts/admin-layout/admin-layout.module.ts\",\n\t\t\"layouts-admin-layout-admin-layout-module\"\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tvar ids = map[req];\n\tif(!ids) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\tvar id = ids[0];\n\t\treturn __webpack_require__.t(id, 7);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = \"./src/$$_lazy_route_resource lazy recursive\";\nmodule.exports = webpackAsyncContext;","module.exports = \"\"","module.exports = \"\\n\\n\"","import { Component, OnInit } from '@angular/core';\nimport { LocationStrategy, PlatformLocation, Location } from '@angular/common';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.css']\n})\nexport class AppComponent implements OnInit {\n\n constructor(public location: Location) {}\n\n ngOnInit(){\n }\n\n isMap(path){\n var titlee = this.location.prepareExternalUrl(this.location.path());\n titlee = titlee.slice( 1 );\n if(path == titlee){\n return false;\n }\n else {\n return true;\n }\n }\n}\n","import { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { HttpModule } from '@angular/http';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { RouterModule } from '@angular/router';\r\n\r\nimport { AppRoutingModule } from './app.routing';\r\nimport { NavbarModule } from './shared/navbar/navbar.module';\r\nimport { FooterModule } from './shared/footer/footer.module';\r\nimport { SidebarModule } from './sidebar/sidebar.module';\r\n\r\nimport { AppComponent } from './app.component';\r\n\r\nimport { AdminLayoutComponent } from './layouts/admin-layout/admin-layout.component';\r\nimport { ResidentService } from './services/resident.service';\r\n\r\n@NgModule({\r\n imports: [\r\n BrowserAnimationsModule,\r\n FormsModule,\r\n RouterModule,\r\n HttpModule,\r\n HttpClientModule,\r\n NavbarModule,\r\n FooterModule,\r\n SidebarModule,\r\n AppRoutingModule,\r\n ],\r\n declarations: [\r\n AppComponent,\r\n AdminLayoutComponent,\r\n ],\r\n providers: [\r\n ResidentService\r\n ],\r\n bootstrap: [AppComponent]\r\n})\r\nexport class AppModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule, } from '@angular/common';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { Routes, RouterModule } from '@angular/router';\r\n\r\nimport { AdminLayoutComponent } from './layouts/admin-layout/admin-layout.component';\r\n\r\nconst routes: Routes =[\r\n {\r\n path: '',\r\n redirectTo: 'home',\r\n pathMatch: 'full',\r\n }, {\r\n path: '',\r\n component: AdminLayoutComponent,\r\n children: [\r\n {\r\n path: '',\r\n loadChildren: './layouts/admin-layout/admin-layout.module#AdminLayoutModule'\r\n }]},\r\n {\r\n path: '**',\r\n redirectTo: 'acp'\r\n }\r\n];\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n BrowserModule,\r\n RouterModule.forRoot(routes)\r\n ],\r\n exports: [\r\n ],\r\n})\r\nexport class AppRoutingModule { }\r\n","module.exports = \"\\n
\\n
\\n \\n
\\n
\\n\\n
\\n \\n \\n
\\n \\n
\\n
\\n\\n
\\n\"","module.exports = \"\"","import { Component, OnInit, ViewChild, AfterViewInit } from '@angular/core';\nimport { Location, LocationStrategy, PathLocationStrategy, PopStateEvent } from '@angular/common';\nimport 'rxjs/add/operator/filter';\nimport { NavbarComponent } from '../../shared/navbar/navbar.component';\nimport { Router, NavigationEnd, NavigationStart } from '@angular/router';\nimport { Subscription } from 'rxjs/Subscription';\nimport PerfectScrollbar from 'perfect-scrollbar';\nimport { Observable } from 'rxjs';\n\n@Component({\n selector: 'app-admin-layout',\n templateUrl: './admin-layout.component.html',\n styleUrls: ['./admin-layout.component.scss']\n})\nexport class AdminLayoutComponent implements OnInit {\n private _router: Subscription;\n private lastPoppedUrl: string;\n private yScrollStack: number[] = [];\n\n constructor( public location: Location, private router: Router) {}\n\n ngOnInit() {\n console.log(this.router)\n const isWindows = navigator.platform.indexOf('Win') > -1 ? true : false;\n\n if (isWindows && !document.getElementsByTagName('body')[0].classList.contains('sidebar-mini')) {\n // if we are on windows OS we activate the perfectScrollbar function\n\n document.getElementsByTagName('body')[0].classList.add('perfect-scrollbar-on');\n } else {\n document.getElementsByTagName('body')[0].classList.remove('perfect-scrollbar-off');\n }\n const elemMainPanel = document.querySelector('.main-panel');\n const elemSidebar = document.querySelector('.sidebar .sidebar-wrapper');\n\n this.location.subscribe((ev:PopStateEvent) => {\n this.lastPoppedUrl = ev.url;\n });\n this.router.events.subscribe((event:any) => {\n if (event instanceof NavigationStart) {\n if (event.url != this.lastPoppedUrl)\n this.yScrollStack.push(window.scrollY);\n } else if (event instanceof NavigationEnd) {\n if (event.url == this.lastPoppedUrl) {\n this.lastPoppedUrl = undefined;\n window.scrollTo(0, this.yScrollStack.pop());\n } else\n window.scrollTo(0, 0);\n }\n });\n this._router = this.router.events.filter(event => event instanceof NavigationEnd).subscribe((event: NavigationEnd) => {\n elemMainPanel.scrollTop = 0;\n elemSidebar.scrollTop = 0;\n });\n if (window.matchMedia(`(min-width: 960px)`).matches && !this.isMac()) {\n let ps = new PerfectScrollbar(elemMainPanel);\n ps = new PerfectScrollbar(elemSidebar);\n }\n }\n ngAfterViewInit() {\n this.runOnRouteChange();\n }\n isMap(path){\n var titlee = this.location.prepareExternalUrl(this.location.path());\n titlee = titlee.slice( 1 );\n if(path == titlee){\n return false;\n }\n else {\n return true;\n }\n }\n runOnRouteChange(): void {\n if (window.matchMedia(`(min-width: 960px)`).matches && !this.isMac()) {\n const elemMainPanel = document.querySelector('.main-panel');\n const ps = new PerfectScrollbar(elemMainPanel);\n ps.update();\n }\n }\n isMac(): boolean {\n let bool = false;\n if (navigator.platform.toUpperCase().indexOf('MAC') >= 0 || navigator.platform.toUpperCase().indexOf('IPAD') >= 0) {\n bool = true;\n }\n return bool;\n }\n\n}\n","import { Injectable } from '@angular/core';\r\nimport { Resident } from 'modules/types';\r\nimport { Router } from '@angular/router';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ResidentService {\r\n private resident: Resident[] = null;\r\n private tableTitle: string;\r\n private tableSubtitle: string;\r\n \r\n constructor(private router: Router) { }\r\n\r\n public get residentList(): Resident[] {\r\n return this.resident;\r\n }\r\n\r\n public set residentList(newList: Resident[]) {\r\n this.resident = newList || null;\r\n }\r\n\r\n public get title(): string {\r\n return this.tableTitle;\r\n }\r\n\r\n public set title(titleText: string) {\r\n this.tableTitle = titleText || \"\";\r\n }\r\n\r\n public get subtitle(): string {\r\n return this.tableSubtitle;\r\n }\r\n\r\n public set subtitle(subtitleText: string) {\r\n this.tableSubtitle = subtitleText || null;\r\n }\r\n\r\n // This method navigates to the target page and passes the list of residents to be displayed when the page loads.\r\n // args: target -\r\n // the URL of the target page (this can be a path property from the Routes object (e.g., 'home'))\r\n // tableTitle -\r\n // the title which will appear above the table displaying the set of residents\r\n // tableSubtitle -\r\n // the subtitle which will appear above the table displaying the set of residents\r\n // resident - \r\n // the set of residents to display when the target page loads\r\n // note: Since this function is called from a bind function, the implicit 'this' refers to the object passed as the\r\n // first argument provided by the caller (the caller's object's 'residentService' instance, in this case).\r\n showResidentList(target: string, tableTitle: string, tableSubtitle: string, resident: Resident[]) {\r\n this.tableTitle = tableTitle;\r\n this.tableSubtitle = tableSubtitle;\r\n this.residentList = resident;\r\n this.router.navigateByUrl(target);\r\n }\r\n\r\n \r\n}\r\n","module.exports = \"\\n\"","import { Component } from '@angular/core';\r\n\r\ndeclare var $:any;\r\n\r\n@Component({\r\n selector: 'footer-cmp',\r\n templateUrl: 'footer.component.html'\r\n})\r\nexport class FooterComponent{\r\n test : Date = new Date();\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { FooterComponent } from './footer.component';\n\n@NgModule({\n imports: [ RouterModule, CommonModule ],\n declarations: [ FooterComponent ],\n exports: [ FooterComponent ]\n})\n\nexport class FooterModule {}\n","module.exports = \"\\n\"","import { Component, OnInit, ElementRef } from '@angular/core';\r\nimport { ROUTES } from '../../sidebar/sidebar.component';\r\nimport { Location, LocationStrategy, PathLocationStrategy } from '@angular/common';\r\nimport { Util } from 'modules/util';\r\n\r\n@Component({\r\n // moduleId: module.id,\r\n selector: 'navbar-cmp',\r\n templateUrl: 'navbar.component.html'\r\n})\r\nexport class NavbarComponent implements OnInit {\r\n private listTitles: any[];\r\n location: Location;\r\n private toggleButton: any;\r\n private sidebarVisible: boolean;\r\n\r\n constructor(location: Location, private element: ElementRef) {\r\n this.location = location;\r\n this.sidebarVisible = false;\r\n }\r\n\r\n ngOnInit() {\r\n this.listTitles = ROUTES.filter(listTitle => listTitle);\r\n const navbar: HTMLElement = this.element.nativeElement;\r\n this.toggleButton = navbar.getElementsByClassName('navbar-toggle')[0];\r\n }\r\n sidebarOpen() {\r\n const toggleButton = this.toggleButton;\r\n const body = document.getElementsByTagName('body')[0];\r\n setTimeout(function () {\r\n toggleButton.classList.add('toggled');\r\n }, 500);\r\n body.classList.add('nav-open');\r\n\r\n this.sidebarVisible = true;\r\n };\r\n sidebarClose() {\r\n const body = document.getElementsByTagName('body')[0];\r\n this.toggleButton.classList.remove('toggled');\r\n this.sidebarVisible = false;\r\n body.classList.remove('nav-open');\r\n };\r\n sidebarToggle() {\r\n // const toggleButton = this.toggleButton;\r\n // const body = document.getElementsByTagName('body')[0];\r\n if (this.sidebarVisible === false) {\r\n this.sidebarOpen();\r\n } else {\r\n this.sidebarClose();\r\n }\r\n };\r\n\r\n getTitle() {\r\n var titlee = this.location.prepareExternalUrl(this.location.path());\r\n titlee = titlee.split('/').pop();\r\n for (var i = 0; i < this.listTitles.length; i++) {\r\n if (this.listTitles[i].path === titlee) {\r\n\r\n if (Util.isInDemoMode()) {\r\n\r\n if (titlee === \"demoMessage\") {\r\n return \"Demonstration Mode\";\r\n }\r\n } // end isInDemoMode()\r\n\r\n return this.listTitles[i].title;\r\n }\r\n }\r\n return \"Home\";\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { NavbarComponent } from './navbar.component';\n\n@NgModule({\n imports: [ RouterModule, CommonModule ],\n declarations: [ NavbarComponent ],\n exports: [ NavbarComponent ]\n})\n\nexport class NavbarModule {}\n","module.exports = \"
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\"","import { Component, OnInit } from '@angular/core';\r\nimport { Util } from 'modules/util';\r\n\r\ndeclare const $: any;\r\ndeclare interface RouteInfo {\r\n menuID: string;\r\n subMenuID: string;\r\n path: string;\r\n title: string;\r\n icon: string;\r\n class: string;\r\n}\r\n\r\nexport const ROUTES: RouteInfo[] = [\r\n // Main Menu Items:\r\n { menuID: 'main', subMenuID: 'acpSub', path: '', title: 'Advance Care Planning', icon: 'icon-binoculars', class: '' },\r\n { menuID: 'main', subMenuID: 'reolSub', path: '', title: 'Recognise End of Life', icon: 'icon-puzzle-piece', class: '' },\r\n { menuID: 'main', subMenuID: 'pcnSub', path: '', title: 'Assess Palliative Care Needs', icon: 'icon-pencil', class: '' },\r\n { menuID: 'main', subMenuID: 'pcSub', path: '', title: 'Provide Palliative Care', icon: 'icon-list-ol', class: '' },\r\n { menuID: 'main', subMenuID: 'workSub', path: '', title: 'Work Together', icon: 'icon-ils', class: '' },\r\n { menuID: 'main', subMenuID: 'detSub', path: '', title: 'Respond to Deterioration', icon: 'icon-refresh', class: '' },\r\n { menuID: 'main', subMenuID: 'eolSub', path: '', title: 'Manage Dying', icon: 'icon-medkit', class: '' },\r\n { menuID: 'main', subMenuID: 'bereavementSub', path: '', title: 'Bereavement', icon: 'icon-heart', class: '' },\r\n { menuID: 'main', subMenuID: 'deathSub', path: '', title: 'Death Related Data', icon: 'pe-7s-ticket', class: '' },\r\n\r\n // Submenu Items:\r\n { menuID: 'acpSub', subMenuID: '', path: 'acp', title: 'Advance Care Plan Documentation', icon: '', class: '' },\r\n { menuID: 'acpSub', subMenuID: '', path: 'surrogate', title: 'Substitute Decision Maker', icon: 'pe-7s-pen', class: '' },\r\n { menuID: 'pcnSub', subMenuID: '', path: 'pcphasing', title: 'EOL Status', icon: 'pe-7s-clock', class: '' },\r\n { menuID: 'reolSub', subMenuID: '', path: 'spict', title: 'SPICT Utilisation', icon: 'pe-7s-way', class: '' },\r\n { menuID: 'pcSub', subMenuID: '', path: 'pcdoc', title: 'Palliative Care Plan Documentation', icon: 'pe-7s-copy-file', class: '' },\r\n { menuID: 'workSub', subMenuID: '', path: 'pcservice', title: 'Expert Palliative Care Input', icon: 'pe-7s-study', class: '' },\r\n { menuID: 'workSub', subMenuID: '', path: 'family', title: 'Family Conference', icon: 'pe-7s-users', class: '' },\r\n { menuID: 'detSub', subMenuID: '', path: 'hospitalisation', title: 'Hospitalisation', icon: 'pe-7s-clock', class: '' },\r\n { menuID: 'detSub', subMenuID: '', path: 'pcphasing', title: 'EOL Status', icon: 'pe-7s-clock', class: '' },\r\n { menuID: 'eolSub', subMenuID: '', path: 'eolman', title: 'EOL Dying Care', icon: 'pe-7s-hourglass', class: '' },\r\n { menuID: 'bereavementSub', subMenuID: '', path: 'bereavement', title: 'Bereavement', icon: 'pe-7s-drop', class: '' },\r\n { menuID: 'deathSub', subMenuID: '', path: 'death', title: 'Death and EOL Status', icon: 'pe-7s-ticket', class: '' },\r\n { menuID: 'deathSub', subMenuID: '', path: 'deathplace', title: 'Place of Death', icon: 'pe-7s-ticket', class: '' },\r\n\r\n // Other:\r\n { menuID: '', subMenuID: '', path: 'residenttable', title: 'Residents', icon: '', class: '' }\r\n];\r\n\r\n@Component({\r\n selector: 'app-sidebar',\r\n templateUrl: './sidebar.component.html'\r\n})\r\nexport class SidebarComponent implements OnInit {\r\n menuItems: any[];\r\n\r\n constructor() { }\r\n\r\n // Given a menuID, this method returns the subset of routes from ROUTES which have the specified menuID.\r\n // args: menuID - \r\n // the menuID which will identify a route as a valid member of the returned subset\r\n // colouring.\r\n // return: a subset of ROUTES having the specified menuID\r\n // note: a further restricted subset shall be returned when demo mode is enabled\r\n somePaths(menuID: string) {\r\n let routes: RouteInfo[] = null;\r\n if (Util.isInDemoMode()) {\r\n // routes = ROUTES.filter(menuitem => menuitem.menuID === menuID && (menuitem.subMenuID === \"acpSub\" || menuitem.subMenuID === \"\"));\r\n routes = ROUTES.filter(menuitem => menuitem.menuID === menuID);\r\n } else {\r\n routes = ROUTES.filter(menuitem => menuitem.menuID === menuID);\r\n }\r\n return routes;\r\n }\r\n\r\n ngOnInit() {\r\n // this.menuItems = ROUTES.filter(menuItem => menuItem);\r\n if (Util.isInDemoMode()) {\r\n\r\n for (let route of ROUTES) {\r\n if (route.menuID != \"main\" && (route.menuID != \"acpSub\")) {\r\n route.path = \"demoMessage\";\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n isMobileMenu() {\r\n if ($(window).width() > 991) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { SidebarComponent } from './sidebar.component';\n\n@NgModule({\n imports: [ RouterModule, CommonModule ],\n declarations: [ SidebarComponent ],\n exports: [ SidebarComponent ]\n})\n\nexport class SidebarModule {}\n","// The file contents for the current environment will overwrite these during build.\r\n// The build system defaults to the dev environment which uses `environment.ts`, but if you do\r\n// `ng build --env=prod` then `environment.prod.ts` will be used instead.\r\n// The list of which env maps to which file can be found in `angular-cli.json`.\r\n\r\nexport const environment = {\r\n demoMode: true,\r\n production: false,\r\n residentModelUrl: 'assets/data/residentmodel.json',\r\n configModelUrl: 'assets/data/configmodel.json'\r\n};\r\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule);\n","import { getRenderedText } from \"@angular/core/src/render3\";\r\nimport { parseHttpResponse } from \"selenium-webdriver/http\";\r\n\r\nexport interface CollapseState {\r\n chartElementID: string[];\r\n isCollapsed: boolean[];\r\n}\r\n\r\nexport interface Resident {\r\n residentName: string;\r\n residentAge: number;\r\n residentGender: string;\r\n pcPhase: string;\r\n expertType: string;\r\n deathDate: Date;\r\n lastAcpReviewDate: Date;\r\n lastFamilyConferenceDate: Date;\r\n lastPCPlanReviewDate: Date;\r\n lastSdmReviewDate: Date;\r\n lastSpictDate: Date;\r\n hasBereavementSupport: boolean;\r\n hasExpertInput: boolean;\r\n hasGriefSupport: boolean;\r\n isOnEolPathway: boolean;\r\n hospitalisationStartDate: Date;\r\n hospitalisationEndDate: Date;\r\n hospitalisationReasonCode: string;\r\n}\r\n\r\nexport enum ResidentSortKey {\r\n Age,\r\n Gender,\r\n Name,\r\n Phase,\r\n}\r\n\r\nexport interface ChartElementDescriptor {\r\n legendLabel: string;\r\n proportion: number;\r\n}\r\n\r\nexport enum EventType {\r\n Death,\r\n Hospitalised,\r\n LastAcpReview,\r\n LastFamilyConference,\r\n LastPCPlanReview,\r\n LastSdmReview,\r\n LastSpict\r\n}\r\n\r\n// Important: due to input dependencies, items within MetricType must be single words only!\r\nexport enum MetricType {\r\n Expert, // expert type (e.g., IPCT, NP, SPCS)\r\n Phase // PC Phase (e.g., ID, EOL, NE)\r\n}\r\n \r\nexport enum FlagType {\r\n Bereavement, // family bereavement supported\r\n Expert, // has expert input\r\n Eol, // on EOL pathway\r\n Grief // resident grief supported\r\n}\r\n\r\nexport enum ShortMonthName {\r\n Jan = 0,\r\n Feb,\r\n Mar,\r\n Apr,\r\n May,\r\n Jun,\r\n Jul,\r\n Aug,\r\n Sep,\r\n Oct,\r\n Nov,\r\n Dec\r\n}\r\n ","import { ChartElementDescriptor, FlagType, MetricType, ResidentSortKey } from \"./types\";\r\nimport { Resident } from './types';\r\nimport { environment } from '../environments/environment';\r\nimport { p } from \"@angular/core/src/render3\";\r\n// import * as $ from \"jquery\";\r\n\r\nexport class Util {\r\n\r\n // The isInDemoMode method has been added so that variations which are intended to be implemented for demonstration\r\n // purposes only can easily, and conditionally, incorporated into the standard code base. To use, ensure that\r\n // demoMode property is added to a configuration environment and set, and then conditionally include demo code in\r\n // a conditional block which is true when this method is called. An independent demo environment (environment.demo.ts)\r\n // has been created for this purpose and can be used to serve or build in demo mode (e.g., \"ng serve --port xx\r\n // --configuration demo\")\r\n // \r\n static isInDemoMode(): boolean {\r\n // @ts-ignore -- ignore error for possible expected absence of demoMode property: \r\n return environment.hasOwnProperty(\"demoMode\") && environment.demoMode;\r\n }\r\n\r\n // Given the ID of a chart, or its containing div element, this method will colour chart legend items with the\r\n // colour of the associated chart element.\r\n // args: chartID - \r\n // CSS ID value identifying the chart to use\r\n // chartElementClass - \r\n // one or more space separated CSS classes which uniquely identify the set of chart elements from which\r\n // colours will be copied into legend items (e.g., 'ct-slice-pie', 'ct-bar')\r\n // legendSymbolClass - \r\n // one or more space separated CSS classes which uniquely identify the set of legend symbols which will be\r\n // coloured (e.g., 'fa fa-circle')\r\n // sourceColourPropertyName -\r\n // name of the CSS property from which the source colour will be derived (e.g., 'fill', 'stroke')\r\n // assumeDoubleLegendSymbolCount -\r\n // This method will typically be called from appropriate angular lifecycle hooks. A side-effect is that when\r\n // the method is called, and the HTML is rendered, there are twice the number of legend symbols available for\r\n // colouring. If argument supplied for this parameter is set to true (default), colouring will only be\r\n // applied to half the rendered symbols. If for some reason, colouring isn't being properly applied for a\r\n // particular invocation of this method, simply change the argument to false. Note that if the argument is\r\n // set to false anyway, colouring will be properly applied, but an inefficiency is introduced by redundant\r\n // colouring.\r\n // \r\n static colourLegend(chartID: string, chartElementClass: string, legendSymbolClass: string, \r\n sourceColourPropertyName: string, assumeDoubleLegendSymbolCount: boolean = true ) {\r\n let chart = document.getElementById(chartID);\r\n if (chart != null) {\r\n let chartElements = chart.getElementsByClassName(chartElementClass);\r\n if (chartElements != null && chartElements.length > 0) {\r\n let chartLegendSymbols = \r\n chart.getElementsByClassName(legendSymbolClass) as HTMLCollectionOf;\r\n if (chartLegendSymbols != null) {\r\n // The rendered HTML typically contains 2 sets of symbols at the time colouring is applied; only one should be\r\n // coloured:\r\n let chartLegendSymbolsCount = assumeDoubleLegendSymbolCount ? chartLegendSymbols.length / 2 : \r\n chartLegendSymbols.length;\r\n for (let i = 0; i < chartElements.length && i < chartLegendSymbolsCount; i++) {\r\n chartLegendSymbols[i].style.color = \r\n window.getComputedStyle(chartElements[i], null).getPropertyValue(sourceColourPropertyName);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Given the ID of a chart, or its containing div element, this method will colour chart legend items with the\r\n // colour of the associated chart element.\r\n // args: chartID - \r\n // CSS ID value identifying the chart to use\r\n // chartElementClass - \r\n // one or more space separated CSS classes which uniquely identify the set of chart elements from which\r\n // colours will be copied into legend items (e.g., 'ct-slice-pie', 'ct-bar')\r\n // legendSymbolClass - \r\n // one or more space separated CSS classes which uniquely identify the set of legend symbols which will be\r\n // coloured (e.g., 'fa fa-circle')\r\n // sourceColourPropertyName -\r\n // name of the CSS property from which the source colour will be derived (e.g., 'fill', 'stroke')\r\n // seriesCount -\r\n // the number of series displayed in the chart. Note, this equates to the number of discrete colours used\r\n // for chart elements associated with legend symbols (e.g., bar colours in a bar chart).\r\n // assumeDoubleLegendSymbolCount -\r\n // This method will typically be called from appropriate angular lifecycle hooks. A side-effect is that when\r\n // the method is called, and the HTML is rendered, there are twice the number of legend symbols available for\r\n // colouring. If argument supplied for this parameter is set to true (default), colouring will only be\r\n // applied to half the rendered symbols. If for some reason, colouring isn't being properly applied for a\r\n // particular invocation of this method, simply change the argument to false. Note that if the argument is\r\n // set to false anyway, colouring will be properly applied, but an inefficiency is introduced by redundant\r\n // colouring.\r\n // note: This method differs with respect to the colourLegend method since it must retrieve colours from chart\r\n // elements (for each series) in a non-sequential manner.\r\n static colourLegendForMultipleSeries(chartID: string, chartElementClass: string, legendSymbolClass: string, \r\n sourceColourPropertyName: string, seriesCount: number, assumeDoubleLegendSymbolCount: boolean = true) {\r\n if (seriesCount > 0 ) {\r\n let chart = document.getElementById(chartID);\r\n if (chart != null) {\r\n let chartElements = chart.getElementsByClassName(chartElementClass);\r\n if (chartElements != null && chartElements.length > 0) {\r\n let chartLegendSymbols = \r\n chart.getElementsByClassName(legendSymbolClass) as HTMLCollectionOf;\r\n if (chartLegendSymbols != null) {\r\n // The rendered HTML typically contains 2 sets of symbols at the time colouring is applied; only one should be\r\n // coloured:\r\n let chartLegendSymbolsCount = assumeDoubleLegendSymbolCount ? chartLegendSymbols.length / 2 : \r\n chartLegendSymbols.length;\r\n let elementCountPerSeries = chartElements.length / seriesCount;\r\n for (let i = 0; i < seriesCount && i < chartElements.length && i < chartLegendSymbolsCount; i++) {\r\n chartLegendSymbols[i].style.color = \r\n window.getComputedStyle(chartElements[(i * elementCountPerSeries)],\r\n null).getPropertyValue(sourceColourPropertyName);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // This method calculates the number of days between the two supplied dates.\r\n // args: thisDay -\r\n // the first of the pair of dates.\r\n // thatDay -\r\n // the second of the pair of dates.\r\n // return: the number of integral days when thatDay is subtraced from thisDay.\r\n static daysSubtract(thisDay: Date, thatDay: Date): number\r\n {\r\n const MS_PER_DAY: number = 86400000;\r\n // Since only dates without time are needed, set input dates to midnight:\r\n thisDay.setHours(0, 0, 0, 0);\r\n thatDay.setHours(0, 0, 0, 0);\r\n\r\n let thisDayMS = thisDay.getTime();\r\n let thatDayMS = thatDay.getTime();\r\n let diffMS = thisDayMS - thatDayMS;\r\n\r\n return Math.round(diffMS / MS_PER_DAY);\r\n }\r\n\r\n // Converts a text date to a Date.\r\n // args: textDate - \r\n // a date as text in the format \"dd/mm/yyyy\" with any valid delimiter (not just \"/\").\r\n // return: a Date object corresponding to the date supplied. If the supplied date is invalid, a null will be returned.\r\n // TODO: validate the input date and handle appropriately\r\n static textDateToDate(textDate: String): Date {\r\n let date: Date = null;\r\n let isValidDate = true;\r\n if (textDate.length != 10 || textDate.substr(6).length != 4 || textDate.substr(3, 2).length != 2 ||\r\n textDate.substr(0, 2).length != 2)\r\n isValidDate = false;\r\n if (isValidDate){\r\n let year = +(textDate.substr(6));\r\n let month = +(textDate.substr(3, 2)) - 1; // since the date constructor's month parameter is 0 based\r\n let day = +(textDate.substr(0, 2));\r\n if (isNaN(day) || isNaN(month) || isNaN(year) || year < 0 || day < 1 || month < 0 || month > 11)\r\n isValidDate = false;\r\n else if (day > this.getDaysInMonth(month, year))\r\n isValidDate = false;\r\n else\r\n {\r\n date = new Date(year, month, day);\r\n if (isNaN(date.getTime()))\r\n isValidDate = false; \r\n }\r\n }\r\n return isValidDate ? date : null;\r\n }\r\n\r\n // Given an array of reals, this method returns an array of its indices by ascending order of the reals' mantissas\r\n // (fractional parts).\r\n // args: realValue - \r\n // an array of real numbers from which mantissas will be extracted for sorting.\r\n // return: an ordered array of indices into 'realValue' where the indices are ordered by the mantissas within the\r\n // 'realValue' array. To illustrate, assume 'realValue' contain the following:\r\n // [0] => 3.5\r\n // [1] => 2.1\r\n // [2] => 6.3\r\n // Sequential order of the mantissas is 1, 3, and 5 and so the returned indices array will contain the associated\r\n // indices in the corresponding order:\r\n // indices[0] => 1\r\n // indices[1] => 2\r\n // indices[2] => 0\r\n static sortByMantissa(realValue: number[]): number[] {\r\n let mantissa = new Array(realValue.length);\r\n for (let i = 0; i < mantissa.length; i++) {\r\n mantissa[i] = realValue[i] - Math.floor(realValue[i]);\r\n }\r\n let indices: number[] = new Array(mantissa.length).fill(0);\r\n for (let i = indices.length - 1; i >= 0; i--) {\r\n let currentMaxIndex = 0;\r\n for (let j = 0; j < mantissa.length; j++) {\r\n if (mantissa[j] > mantissa[currentMaxIndex]) {\r\n indices[i] = j;\r\n currentMaxIndex = j;\r\n }\r\n }\r\n mantissa[currentMaxIndex] = -mantissa[currentMaxIndex];\r\n }\r\n return indices;\r\n }\r\n\r\n // Given a set of non-negative proportions, this method returns the corresponding integral percentages. For example,\r\n // if the proportions, 20 and 30 are supplied, this method will return 40 and 60, since 20 is 40%, and 30 is 60% of\r\n // their total (50). Since rounding can lead to integral percentages that don't sum to 100, the largest remainder\r\n // algorithm is used to adjust individual percentages so that their total is 100, as expected.\r\n // args: proportion -\r\n // an array containing the proportions to be converted to percentages.\r\n // return: an array of integral percentages in the same proportion as the input array and totalling to 100.\r\n // note: in the case where all proportions are equal, but don't total 100, the first value will be incremented to\r\n // compensate. This would occur if three equal portions (each 33 1/3) were provided, for example.\r\n static calculatePercentages(proportion: number[]): number[] {\r\n let percentage: number[] = new Array(proportion.length);\r\n let integralPercentage: number[] = new Array(proportion.length);\r\n let proportionSum: number = 0;\r\n let isBadInput: boolean = false;\r\n for (let currentProportion of proportion) {\r\n if (currentProportion < 0)\r\n isBadInput = true;\r\n proportionSum += currentProportion; \r\n }\r\n if (!(proportionSum > 0)) // '== 0' doesn't work\r\n isBadInput = true;\r\n if (!isBadInput) {\r\n for (let i = 0; i < proportion.length; i++) {\r\n percentage[i] = proportion[i] / proportionSum * 100;\r\n integralPercentage[i] = Math.floor(percentage[i]);\r\n }\r\n let integralPercentageSum: number = 0;\r\n for (let currentIntegralPercentage of integralPercentage) {\r\n integralPercentageSum += currentIntegralPercentage; \r\n }\r\n if (integralPercentageSum != 100) {\r\n let adjustedValuesCount = 100 - integralPercentageSum;\r\n let indicesSortedByMantissa = this.sortByMantissa(percentage);\r\n for (let i = indicesSortedByMantissa.length - 1;\r\n i >= indicesSortedByMantissa.length - adjustedValuesCount && i < integralPercentage.length; i--) {\r\n integralPercentage[indicesSortedByMantissa[i]]++;\r\n }\r\n }\r\n }\r\n else {\r\n // if division by zero occurs return something, rather than crash; in this case though, the chart will be strange.\r\n for (let i = 0; i < integralPercentage.length; i++)\r\n integralPercentage[i] = 0;\r\n }\r\n return integralPercentage;\r\n }\r\n\r\n // Given a set of proportions, this method will return an equivalent set of percentages (as integral values). For\r\n // example, if the proportions, 20 and 30 are supplied, this method will return 40 and 60, since 20 is 40%, and 30\r\n // is 60% of of their total (50).\r\n // args: descriptor -\r\n // an array of non-negative values.\r\n // return: if a descriptor containing a set of non-negative values is supplied, a descriptor with a set of\r\n // corresponding relative percentages will be returned. If negative values are supplied or their sum is 0, this\r\n // method will return null.\r\n static calculateDescriptorPercentages(descriptor: ChartElementDescriptor[]): ChartElementDescriptor[] {\r\n let chartElementDescriptor: ChartElementDescriptor[] = new Array(descriptor.length);\r\n let proportion: number[] = new Array(descriptor.length);\r\n for (let i = 0; i < descriptor.length; i++) {\r\n proportion[i] = descriptor[i].proportion;\r\n }\r\n let percentage: number[] = Util.calculatePercentages(proportion);\r\n if (percentage == null) {\r\n chartElementDescriptor = null;\r\n }\r\n else {\r\n for (let i = 0; i < percentage.length; i++) {\r\n chartElementDescriptor[i] = { legendLabel: descriptor[i].legendLabel, proportion: percentage[i] };\r\n }\r\n }\r\n return chartElementDescriptor;\r\n }\r\n\r\n // This method extracts the elements from a ChartElementDescriptor[] and returns a corresponding array of labels\r\n // with the same ordering.\r\n // args: chartElementDescriptor -\r\n // an array of descriptors containing a value (including \"\") in each of its element's 'legendLabel'\r\n // properties.\r\n // return: an array of labels extracted from 'chartElementDescriptor' and in the same order as the descriptor's\r\n // elements\r\n static toLegendLabelArray(chartElementDescriptor: ChartElementDescriptor[]): string[] {\r\n let legendLabel: string[] = new Array(chartElementDescriptor.length);\r\n for (let i = 0; i < chartElementDescriptor.length; i++) {\r\n legendLabel[i] = chartElementDescriptor[i].legendLabel;\r\n }\r\n return legendLabel;\r\n }\r\n\r\n // Extracts the elements from a ChartElementDescriptor[] and returns a corresponding array of proportions with the\r\n // same ordering.\r\n // args: chartElementDescriptor -\r\n // an array of descriptors containing a value (including \"\") in each of its element's 'proportion'\r\n // properties.\r\n // return: an array of proportionss extracted from 'chartElementDescriptor' and in the same order as the descriptor's\r\n // elements\r\n static toProportionArray(chartElementDescriptor: ChartElementDescriptor[]): number[] {\r\n let proportion: number[] = new Array(chartElementDescriptor.length);\r\n for (let i = 0; i < chartElementDescriptor.length; i++) {\r\n proportion[i] = chartElementDescriptor[i].proportion;\r\n }\r\n return proportion;\r\n }\r\n\r\n // This method converts the provided string into its MetricType equivalent. 'undefined' is returned if a\r\n // corresponding MetricType doesn't exist.\r\n // args: word -\r\n // the string to be converted.\r\n // return: if there is a corresponding MetricType, that will be returned, otherwise, 'undefined' will be returned.\r\n static toMetricType(word: string): MetricType {\r\n let capitalisedWord = \"\";\r\n if (word && word.length > 0)\r\n capitalisedWord = word.charAt(0).toUpperCase() + word.toLowerCase().slice(1);\r\n return MetricType[capitalisedWord];\r\n }\r\n\r\n // This method converts the provided string into its FlagType equivalent. 'undefined' is returned if a\r\n // corresponding FlagType doesn't exist.\r\n // args: word -\r\n // the string to be converted.\r\n // return: if there is a corresponding FlagType, that will be returned, otherwise, 'undefined' will be returned.\r\n static toFlagType(word: string): FlagType {\r\n let capitalisedWord = \"\";\r\n if (word && word.length > 0)\r\n capitalisedWord = word.charAt(0).toUpperCase() + word.toLowerCase().slice(1);\r\n return FlagType[capitalisedWord];\r\n }\r\n\r\n // This method converts the provided string into its ResidentSortKey equivalent. ResidentSortKey.Name is used by\r\n // default and returned if a corresponding ResidentSortKey doesn't exist.\r\n // args: word -\r\n // the string to be converted.\r\n // return: if there is a corresponding ResidentSortKey, that will be returned, otherwise, ResidentSortKey.Name will\r\n // be returned.\r\n static toResidentSortKey(word: string): ResidentSortKey {\r\n let capitalisedWord = \"Name\";\r\n if (word && word.length > 0)\r\n capitalisedWord = word.charAt(0).toUpperCase() + word.toLowerCase().slice(1);\r\n return ResidentSortKey[capitalisedWord];\r\n }\r\n\r\n // Converts a string representation of a truth value into a boolean.\r\n // args: booleanText -\r\n // the string representation of a truth value.\r\n // return: if, \"y\", \"yes\", \"t\", or \"true\" is provided (in any case), 'true' will be returned, otherwise, 'false' will\r\n // be returned.\r\n static toBoolean(booleanText: string): boolean {\r\n let isTrue: boolean = false;\r\n let isTrueText = booleanText.toLowerCase();\r\n if (booleanText == \"y\" || booleanText == \"yes\" || booleanText == \"t\" || booleanText == \"true\")\r\n isTrue = true;\r\n return isTrue;\r\n }\r\n\r\n // This method compares two residents according to their age and then name.\r\n // args: thisResident -\r\n // one of the pair of residents being compared.\r\n // the second of the pair of residents being compared.\r\n // return: '1', if 'thisResident' is older than 'thatResident', '-1', if 'thisResident' is younger than\r\n // 'thatResident', or, if both residents are the same age, returns 1 if 'thisResident' has a full name which appears\r\n // alphabetically later than the full name of 'thatResident', '-1', if the full name of 'thisResident' appears\r\n // alphabetically earlier than the full name of 'thatResident', or '0' if both names are identical.\r\n static residentCompareByAge(thisResident: Resident, thatResident: Resident): number {\r\n let matchValue: number = 0;\r\n if (thisResident.residentAge > thatResident.residentAge)\r\n matchValue = 1;\r\n else if (thisResident.residentAge < thatResident.residentAge)\r\n matchValue = -1;\r\n if (matchValue == 0) {\r\n if (thisResident.residentName > thatResident.residentName)\r\n matchValue = 1;\r\n else if (thisResident.residentName < thatResident.residentName)\r\n matchValue = -1;\r\n }\r\n return matchValue;\r\n }\r\n\r\n // This method compares two residents according to their gender and then name.\r\n // args: thisResident -\r\n // one of the pair of residents being compared.\r\n // the second of the pair of residents being compared.\r\n // return: '1', if 'thisResident' has a gender which appears alphabetically later than the gender of 'thatResident',\r\n // '-1', if the gender of 'thisResident' appears alphabetically earlier than the gender of 'thatResident', or, if\r\n // both residents are the same gender, returns 1 if 'thisResident' has a full name which appears alphabetically later\r\n // than the full name of 'thatResident', '-1', if the full name of 'thisResident' appears alphabetically earlier\r\n // than the full name of 'thatResident', or '0' if both names are identical.\r\n static residentCompareByGender(thisResident: Resident, thatResident: Resident): number {\r\n let matchValue: number = 0;\r\n if (thisResident.residentGender > thatResident.residentGender)\r\n matchValue = 1;\r\n else if (thisResident.residentGender < thatResident.residentGender)\r\n matchValue = -1;\r\n if (matchValue == 0) {\r\n if (thisResident.residentName > thatResident.residentName)\r\n matchValue = 1;\r\n else if (thisResident.residentName < thatResident.residentName)\r\n matchValue = -1;\r\n }\r\n return matchValue;\r\n }\r\n\r\n // This method compares two residents according to their full names.\r\n // args: thisResident -\r\n // one of the pair of residents being compared.\r\n // the second of the pair of residents being compared.\r\n // return: '1', if 'thisResident' has a full name which appears alphabetically later than the full name of\r\n // 'thatResident', '-1', if the full name of 'thisResident' appears alphabetically earlier than the full name of\r\n // 'thatResident', or '0' if both names are identical.\r\n static residentCompareByName(thisResident: Resident, thatResident: Resident): number {\r\n let matchValue: number = 0;\r\n if (thisResident.residentName > thatResident.residentName)\r\n matchValue = 1;\r\n else if (thisResident.residentName < thatResident.residentName)\r\n matchValue = -1;\r\n return matchValue;\r\n }\r\n\r\n // This method compares two residents according to their palliative care phases and then name.\r\n // args: thisResident -\r\n // one of the pair of residents being compared.\r\n // the second of the pair of residents being compared.\r\n // return: '1', if 'thisResident' has a phase name which appears alphabetically later than the phase name of\r\n // 'thatResident', '-1', if the phase name of 'thisResident' appears alphabetically earlier than the phase name of\r\n // 'thatResident', or, if both residents are in the same phase, returns 1 if 'thisResident' has a full name which\r\n // appears alphabetically later than the full name of 'thatResident', '-1', if the full name of 'thisResident'\r\n // appears alphabetically earlier than the full name of 'thatResident', or '0' if both names are identical.\r\n static residentCompareByPhase(thisResident: Resident, thatResident: Resident): number {\r\n let matchValue: number = 0;\r\n if (thisResident.pcPhase > thatResident.pcPhase)\r\n matchValue = 1;\r\n else if (thisResident.pcPhase < thatResident.pcPhase)\r\n matchValue = -1;\r\n if (matchValue == 0) {\r\n if (thisResident.residentName > thatResident.residentName)\r\n matchValue = 1;\r\n else if (thisResident.residentName < thatResident.residentName)\r\n matchValue = -1;\r\n }\r\n return matchValue;\r\n }\r\n\r\n // This method sorts and returns the provided set of residents by age, gender, name, or palliative care phase\r\n // depending upon the value of the supplied sort key.\r\n // args: resident -\r\n // a set of residents to sort.\r\n // sortkey -\r\n // the key by which to sort the residents.\r\n // return: a copy of the original set of residents in sorted order.\r\n // note: an array which is a shallow copy of 'resident' is created in the body of this method which will have a\r\n // performance impact if a huge array is to be sorted.\r\n static sortResidentList(resident: Resident[], sortKey: ResidentSortKey): Resident[] {\r\n let sortedResident: Resident[] = resident.slice(0);\r\n switch (sortKey) {\r\n case ResidentSortKey.Age:\r\n sortedResident.sort(Util.residentCompareByAge);\r\n break;\r\n case ResidentSortKey.Gender:\r\n sortedResident.sort(Util.residentCompareByGender);\r\n break;\r\n case ResidentSortKey.Name:\r\n sortedResident.sort(Util.residentCompareByName);\r\n break;\r\n case ResidentSortKey.Phase:\r\n sortedResident.sort(Util.residentCompareByPhase);\r\n break;\r\n }\r\n return sortedResident;\r\n }\r\n\r\n // This method determines whether the give year is a leap year.\r\n // args: year -\r\n // the year to test.\r\n // return: if the given year is a leap year, 'true' will be returned, otherwise 'false' will be returned.\r\n static isLeapYear(year: number): boolean {\r\n let isLeapYear: boolean = false;\r\n if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))\r\n isLeapYear = true;\r\n return isLeapYear;\r\n }\r\n\r\n // This method returns the number of days in the given month for the provided year and takes leap years into account. \r\n // args: month -\r\n // the month number where January is 0 and subsequent months have a value the previous month plus 1 (up to\r\n // 11 for December) \r\n // year -\r\n // the year for which the number of days in the given month should be calculated\r\n // return: if the number of days in the given month for the provided year\r\n static getDaysInMonth(month: number /* 0 indexed */, year: number): number {\r\n let dayCount: number = 31;\r\n switch(month) {\r\n case 1:\r\n dayCount = Util.isLeapYear(year) ? 29 : 28;\r\n break;\r\n case 3:\r\n case 5:\r\n case 8:\r\n case 10:\r\n dayCount = 30;\r\n break;\r\n default:\r\n dayCount = 31;\r\n break;\r\n }\r\n return dayCount;\r\n }\r\n\r\n}"],"sourceRoot":""}