diff --git a/DriverTracker/Controllers/AnalysisApiController.cs b/DriverTracker/Controllers/AnalysisApiController.cs index 43452f8..4dece3d 100644 --- a/DriverTracker/Controllers/AnalysisApiController.cs +++ b/DriverTracker/Controllers/AnalysisApiController.cs @@ -145,6 +145,8 @@ public async Task GetPickupProb(double startlat, double startlon, doub await TrainPickupPrediction(); return _pickupPrediction.GetPickupProbabilities( + + new double[] { startlat, startlon }, new double[] { endlat, endlon }, delay, duration, fare, interval diff --git a/DriverTracker/Controllers/LegsController.cs b/DriverTracker/Controllers/LegsController.cs index f539862..bd1f378 100644 --- a/DriverTracker/Controllers/LegsController.cs +++ b/DriverTracker/Controllers/LegsController.cs @@ -145,13 +145,14 @@ public async Task Edit(int? id, int? driver) return NotFound(); } - var leg = await _context.Legs.FindAsync(id); + var leg = await _context.Legs.Include(l => l.Driver) + .FirstOrDefaultAsync(l => l.LegID == id); if (leg == null) { return NotFound(); } - var driverObj = await _context.Drivers.FirstOrDefaultAsync(m => m.DriverID == id); + var driverObj = leg.Driver; var authResult = await _authorizationService.AuthorizeAsync(User, driverObj, "DriverInfoPolicy"); if (!authResult.Succeeded) @@ -176,7 +177,6 @@ public async Task Edit(int? id, int? driver) // POST: Legs/Edit/5 // To protect from overposting attacks, please enable the specific properties you want to bind to, for // more details see http://go.microsoft.com/fwlink/?LinkId=317598. - // TODO troubleshoot why access is denied to admin users [HttpPost] [ValidateAntiForgeryToken] public async Task Edit(int id, int? driver, [Bind("LegID,DriverID,StartAddress,PickupRequestTime,StartTime,DestinationAddress,ArrivalTime,Distance,Fare,NumOfPassengersAboard,NumOfPassengersPickedUp,FuelCost")] Leg leg) diff --git a/DriverTracker/Domain/PickupPrediction.cs b/DriverTracker/Domain/PickupPrediction.cs index dbdf696..3e83f61 100644 --- a/DriverTracker/Domain/PickupPrediction.cs +++ b/DriverTracker/Domain/PickupPrediction.cs @@ -200,6 +200,12 @@ public async Task LearnFromDates(DateTime from, DateTime to) { double[][] dataSubset = dataset.Where((dp, k) => pickupNumbers[k] == n).ToArray(); int[] fareClassesSubset = fareClasses.Where((fc, k) => pickupNumbers[k] == n).ToArray(); + + if (dataSubset.Length == 0) + { + throw new ApplicationException("Insufficient data to make a reliable prediction"); + } + // for each fare class interval boundary for (int j = 0; j < NumberOfFareClassIntervals; j++) { diff --git a/DriverTracker/DriverTracker.db b/DriverTracker/DriverTracker.db index 9986091..39c70a9 100644 Binary files a/DriverTracker/DriverTracker.db and b/DriverTracker/DriverTracker.db differ diff --git a/DriverTracker/Views/Shared/_Layout.cshtml b/DriverTracker/Views/Shared/_Layout.cshtml index 6da645f..cd9237a 100644 --- a/DriverTracker/Views/Shared/_Layout.cshtml +++ b/DriverTracker/Views/Shared/_Layout.cshtml @@ -31,6 +31,7 @@ + diff --git a/DriverTracker/src/app/pickup-predictor/pickup-predictor.component.html b/DriverTracker/src/app/pickup-predictor/pickup-predictor.component.html index 430cb7e..7073481 100644 --- a/DriverTracker/src/app/pickup-predictor/pickup-predictor.component.html +++ b/DriverTracker/src/app/pickup-predictor/pickup-predictor.component.html @@ -1,8 +1,8 @@ -

Pickup predictions

-

- Predict probability of completing given leg and collecting fares. -

- +

Pickup predictions

+

+ Predict probability of completing given leg and collecting fares. +

+

Leg information

@@ -43,19 +43,19 @@

Pickup probabilities

-
- -

Results

- -

Fare class probabilities

-
-
-

${{i == 0 ? 0 : fareClassIntervalBoundaries[i-1]}} to ${{fareClassIntervalBoundaries[i]}}:

-
-
-

{{fareClassProbabilities[i] * 100}}%

-
-
+ + +

Results

+ +

Fare class probabilities

+
+
+

${{i == 0 ? 0 : fareClassIntervalBoundaries[i-1]}} to ${{fareClassIntervalBoundaries[i]}}:

+
+
+

{{fareClassProbabilities[i] * 100}}%

+
+

${{fareClassIntervalBoundaries[fareClassIntervalBoundaries.length - 1]}}+:

@@ -63,15 +63,15 @@

Fare class probabilities

{{fareClassProbabilities[fareClassIntervalBoundaries.length] * 100}}%

-
- +
+

Pickup probabilities

-

- Probability of failure to collect: -

+

+ Probability of failure to collect: +

Probability of collecting {{i}} passengers:

@@ -80,4 +80,7 @@

Pickup probabilities

{{pickupProbabilities[i] * 100}}%

-
\ No newline at end of file +
+
+
+
\ No newline at end of file diff --git a/DriverTracker/src/app/pickup-predictor/pickup-predictor.component.ts b/DriverTracker/src/app/pickup-predictor/pickup-predictor.component.ts index 214d79f..51c1731 100644 --- a/DriverTracker/src/app/pickup-predictor/pickup-predictor.component.ts +++ b/DriverTracker/src/app/pickup-predictor/pickup-predictor.component.ts @@ -1,4 +1,5 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, AfterViewChecked } from '@angular/core'; +import { ViewportScroller } from '@angular/common'; import { ActivatedRoute } from '@angular/router'; import { PickupPredictorService } from '../pickup-predictor.service'; import { GeocodingService } from '../geocoding.service'; @@ -10,10 +11,11 @@ import { switchMap } from 'rxjs/operators'; templateUrl: './pickup-predictor.component.html', styleUrls: ['./pickup-predictor.component.scss'] }) -export class PickupPredictorComponent implements OnInit { +export class PickupPredictorComponent implements OnInit, AfterViewChecked { constructor(private pickupPredictorService: PickupPredictorService, private geocodingService: GeocodingService, - private aRoute: ActivatedRoute) { } + private aRoute: ActivatedRoute, + private viewportScroller: ViewportScroller) { } startAddress: string; startCoords: number[]; @@ -33,6 +35,9 @@ export class PickupPredictorComponent implements OnInit { fareClassIntervalBoundaries: number[]; fareClassIndices: number[]; + // so AfterViewChecked knows when to scroll + resultsJustComputed: boolean; + geocodeInputAddresses(geoDependent: ((_1: number[], _2: number[]) => Observable)): Observable { const startCoords$ = this.geocodingService.getAddressCoordinates(this.startAddress); const endCoords$ = this.geocodingService.getAddressCoordinates(this.endAddress); @@ -50,7 +55,10 @@ export class PickupPredictorComponent implements OnInit { this.geocodeInputAddresses((s, e) => this.pickupPredictorService.getFareClassProbabilities( s, e, this.delay, this.duration, this.pickups, this.interval)) - .subscribe(probs => this.fareClassProbabilities = probs); + .subscribe(probs => { + this.resultsJustComputed = true; + this.fareClassProbabilities = probs; + }); } predictPickupProbabilities(): void { @@ -58,16 +66,32 @@ export class PickupPredictorComponent implements OnInit { s, e, this.delay, this.duration, this.fare, this.interval)) .subscribe(probs => { + this.resultsJustComputed = true; this.pickupProbabilities = probs; this.pickupProbabilityIndices = (new Array(probs.length)).fill(0).map((x,i)=>i); }); } ngOnInit() { + this.resultsJustComputed = false; this.pickupPredictorService.getFareClassIntervals() - .subscribe(bounds => this.fareClassIntervalBoundaries = bounds); - this.fareClassIndices = (new Array(this.fareClassIntervalBoundaries.length)) + .subscribe(bounds => { + this.fareClassIntervalBoundaries = bounds; + this.fareClassIndices = (new Array(this.fareClassIntervalBoundaries.length)) .fill(0).map((x,i)=>i); + }); + + } + + ngAfterViewChecked() { + if (this.resultsJustComputed) { + this.scrollToResults(); + this.resultsJustComputed = false; + } + } + + scrollToResults() { + this.viewportScroller.scrollToAnchor("pickupPredictionResults"); } } diff --git a/DriverTracker/wwwroot/libs/main.js b/DriverTracker/wwwroot/libs/main.js index 29e8681..a6fc7c2 100644 --- a/DriverTracker/wwwroot/libs/main.js +++ b/DriverTracker/wwwroot/libs/main.js @@ -89,7 +89,7 @@ module.exports = "" /*! no static exports found */ /***/ (function(module, exports) { -module.exports = "\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJhcHAuY29tcG9uZW50LnNhc3MifQ== */" +module.exports = "\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2FwcC5jb21wb25lbnQuc2FzcyJ9 */" /***/ }), @@ -278,7 +278,7 @@ module.exports = "\r\n

Stat /*! no static exports found */ /***/ (function(module, exports) { -module.exports = "\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJkcml2ZXJzL2RyaXZlcnMuY29tcG9uZW50LnNhc3MifQ== */" +module.exports = "\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2RyaXZlcnMvZHJpdmVycy5jb21wb25lbnQuc2FzcyJ9 */" /***/ }), @@ -518,7 +518,7 @@ module.exports = "

\n legs works!\n

\n" /*! no static exports found */ /***/ (function(module, exports) { -module.exports = "\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJsZWdzL2xlZ3MuY29tcG9uZW50LnNhc3MifQ== */" +module.exports = "\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2xlZ3MvbGVncy5jb21wb25lbnQuc2FzcyJ9 */" /***/ }), @@ -627,7 +627,7 @@ PickupPredictorService = __decorate([ /*! no static exports found */ /***/ (function(module, exports) { -module.exports = "

Pickup predictions

\n

\n Predict probability of completing given leg and collecting fares.\n

\n\n
\r\n

Leg information

\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n

Fare class probabilities

\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n

Pickup probabilities

\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\n\n

Results

\n\n

Fare class probabilities

\n
\n
\n

${{i == 0 ? 0 : fareClassIntervalBoundaries[i-1]}} to ${{fareClassIntervalBoundaries[i]}}:

\n
\n
\n

{{fareClassProbabilities[i] * 100}}%

\n
\n
\n
0\">\r\n
\r\n

${{fareClassIntervalBoundaries[fareClassIntervalBoundaries.length - 1]}}+:

\r\n
\r\n
\r\n

{{fareClassProbabilities[fareClassIntervalBoundaries.length] * 100}}%

\r\n
\r\n
\n
\n\r\n

Pickup probabilities

\r\n
\r\n
\r\n

\n Probability of failure to collect:\n

\n

0\">\r\n Probability of collecting {{i}} passengers:\r\n

\r\n
\r\n
\r\n

{{pickupProbabilities[i] * 100}}%

\r\n
\r\n
\r\n
" +module.exports = "

Pickup predictions

\r\n

\r\n Predict probability of completing given leg and collecting fares.\r\n

\r\n\r\n
\r\n

Leg information

\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n

Fare class probabilities

\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n

Pickup probabilities

\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n

Results

\r\n\r\n

Fare class probabilities

\r\n
\r\n
\r\n

${{i == 0 ? 0 : fareClassIntervalBoundaries[i-1]}} to ${{fareClassIntervalBoundaries[i]}}:

\r\n
\r\n
\r\n

{{fareClassProbabilities[i] * 100}}%

\r\n
\r\n
\r\n
0\">\r\n
\r\n

${{fareClassIntervalBoundaries[fareClassIntervalBoundaries.length - 1]}}+:

\r\n
\r\n
\r\n

{{fareClassProbabilities[fareClassIntervalBoundaries.length] * 100}}%

\r\n
\r\n
\r\n
\r\n\r\n

Pickup probabilities

\r\n
\r\n
\r\n

\r\n Probability of failure to collect:\r\n

\r\n

0\">\r\n Probability of collecting {{i}} passengers:\r\n

\r\n
\r\n
\r\n

{{pickupProbabilities[i] * 100}}%

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
" /***/ }), @@ -638,7 +638,7 @@ module.exports = "

Pickup predictions

\n

\n Predict probability of c /*! no static exports found */ /***/ (function(module, exports) { -module.exports = "\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJwaWNrdXAtcHJlZGljdG9yL3BpY2t1cC1wcmVkaWN0b3IuY29tcG9uZW50LnNjc3MifQ== */" +module.exports = "\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL3BpY2t1cC1wcmVkaWN0b3IvcGlja3VwLXByZWRpY3Rvci5jb21wb25lbnQuc2NzcyJ9 */" /***/ }), @@ -653,11 +653,12 @@ module.exports = "\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PickupPredictorComponent", function() { return PickupPredictorComponent; }); /* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/fesm2015/core.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm2015/router.js"); -/* harmony import */ var _pickup_predictor_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../pickup-predictor.service */ "./src/app/pickup-predictor.service.ts"); -/* harmony import */ var _geocoding_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../geocoding.service */ "./src/app/geocoding.service.ts"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm2015/index.js"); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm2015/operators/index.js"); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/fesm2015/common.js"); +/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/fesm2015/router.js"); +/* harmony import */ var _pickup_predictor_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../pickup-predictor.service */ "./src/app/pickup-predictor.service.ts"); +/* harmony import */ var _geocoding_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../geocoding.service */ "./src/app/geocoding.service.ts"); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm2015/index.js"); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rxjs/operators */ "./node_modules/rxjs/_esm2015/operators/index.js"); var __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); @@ -673,17 +674,19 @@ var __metadata = (undefined && undefined.__metadata) || function (k, v) { + let PickupPredictorComponent = class PickupPredictorComponent { - constructor(pickupPredictorService, geocodingService, aRoute) { + constructor(pickupPredictorService, geocodingService, aRoute, viewportScroller) { this.pickupPredictorService = pickupPredictorService; this.geocodingService = geocodingService; this.aRoute = aRoute; + this.viewportScroller = viewportScroller; } geocodeInputAddresses(geoDependent) { const startCoords$ = this.geocodingService.getAddressCoordinates(this.startAddress); const endCoords$ = this.geocodingService.getAddressCoordinates(this.endAddress); - return Object(rxjs__WEBPACK_IMPORTED_MODULE_4__["combineLatest"])(startCoords$, endCoords$, (startCoords, endCoords) => ({ startCoords, endCoords })) - .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["switchMap"])(pair => { + return Object(rxjs__WEBPACK_IMPORTED_MODULE_5__["combineLatest"])(startCoords$, endCoords$, (startCoords, endCoords) => ({ startCoords, endCoords })) + .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_6__["switchMap"])(pair => { this.startCoords = pair.startCoords; this.endCoords = pair.endCoords; return geoDependent(this.startCoords, this.endCoords); @@ -691,20 +694,36 @@ let PickupPredictorComponent = class PickupPredictorComponent { } onSubmit() { this.geocodeInputAddresses((s, e) => this.pickupPredictorService.getFareClassProbabilities(s, e, this.delay, this.duration, this.pickups, this.interval)) - .subscribe(probs => this.fareClassProbabilities = probs); + .subscribe(probs => { + this.resultsJustComputed = true; + this.fareClassProbabilities = probs; + }); } predictPickupProbabilities() { this.geocodeInputAddresses((s, e) => this.pickupPredictorService.getPickupProbabilities(s, e, this.delay, this.duration, this.fare, this.interval)) .subscribe(probs => { + this.resultsJustComputed = true; this.pickupProbabilities = probs; this.pickupProbabilityIndices = (new Array(probs.length)).fill(0).map((x, i) => i); }); } ngOnInit() { + this.resultsJustComputed = false; this.pickupPredictorService.getFareClassIntervals() - .subscribe(bounds => this.fareClassIntervalBoundaries = bounds); - this.fareClassIndices = (new Array(this.fareClassIntervalBoundaries.length)) - .fill(0).map((x, i) => i); + .subscribe(bounds => { + this.fareClassIntervalBoundaries = bounds; + this.fareClassIndices = (new Array(this.fareClassIntervalBoundaries.length)) + .fill(0).map((x, i) => i); + }); + } + ngAfterViewChecked() { + if (this.resultsJustComputed) { + this.scrollToResults(); + this.resultsJustComputed = false; + } + } + scrollToResults() { + this.viewportScroller.scrollToAnchor("pickupPredictionResults"); } }; PickupPredictorComponent = __decorate([ @@ -713,9 +732,10 @@ PickupPredictorComponent = __decorate([ template: __webpack_require__(/*! ./pickup-predictor.component.html */ "./src/app/pickup-predictor/pickup-predictor.component.html"), styles: [__webpack_require__(/*! ./pickup-predictor.component.scss */ "./src/app/pickup-predictor/pickup-predictor.component.scss")] }), - __metadata("design:paramtypes", [_pickup_predictor_service__WEBPACK_IMPORTED_MODULE_2__["PickupPredictorService"], - _geocoding_service__WEBPACK_IMPORTED_MODULE_3__["GeocodingService"], - _angular_router__WEBPACK_IMPORTED_MODULE_1__["ActivatedRoute"]]) + __metadata("design:paramtypes", [_pickup_predictor_service__WEBPACK_IMPORTED_MODULE_3__["PickupPredictorService"], + _geocoding_service__WEBPACK_IMPORTED_MODULE_4__["GeocodingService"], + _angular_router__WEBPACK_IMPORTED_MODULE_2__["ActivatedRoute"], + _angular_common__WEBPACK_IMPORTED_MODULE_1__["ViewportScroller"]]) ], PickupPredictorComponent); @@ -787,7 +807,7 @@ module.exports = "

Ridership Prediction for Driver: {{driver.name}}

\n\n< /*! no static exports found */ /***/ (function(module, exports) { -module.exports = "\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJwcmVkaWN0b3IvcHJlZGljdG9yLmNvbXBvbmVudC5zYXNzIn0= */" +module.exports = "\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL3ByZWRpY3Rvci9wcmVkaWN0b3IuY29tcG9uZW50LnNhc3MifQ== */" /***/ }), diff --git a/DriverTracker/wwwroot/libs/main.js.map b/DriverTracker/wwwroot/libs/main.js.map index af4693a..6b5882b 100644 --- a/DriverTracker/wwwroot/libs/main.js.map +++ b/DriverTracker/wwwroot/libs/main.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///./src/$_lazy_route_resource lazy namespace object","webpack:///./src/app/app-routing.module.ts","webpack:///./src/app/app.component.html","webpack:///./src/app/app.component.sass","webpack:///./src/app/app.component.ts","webpack:///./src/app/app.module.ts","webpack:///./src/app/driver.service.ts","webpack:///./src/app/drivers/drivers.component.html","webpack:///./src/app/drivers/drivers.component.sass","webpack:///./src/app/drivers/drivers.component.ts","webpack:///./src/app/geocoding.service.ts","webpack:///./src/app/leg.service.ts","webpack:///./src/app/legs/legs.component.html","webpack:///./src/app/legs/legs.component.sass","webpack:///./src/app/legs/legs.component.ts","webpack:///./src/app/pickup-predictor.service.ts","webpack:///./src/app/pickup-predictor/pickup-predictor.component.html","webpack:///./src/app/pickup-predictor/pickup-predictor.component.scss","webpack:///./src/app/pickup-predictor/pickup-predictor.component.ts","webpack:///./src/app/predictor.service.ts","webpack:///./src/app/predictor/predictor.component.html","webpack:///./src/app/predictor/predictor.component.sass","webpack:///./src/app/predictor/predictor.component.ts","webpack:///./src/app/statistics.service.ts","webpack:///./src/environments/environment.ts","webpack:///./src/main.ts"],"names":[],"mappings":"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","file":"main.js","sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"./src/$$_lazy_route_resource lazy recursive\";","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { DriversComponent } from './drivers/drivers.component';\nimport { PredictorComponent } from './predictor/predictor.component';\nimport { PickupPredictorComponent } from './pickup-predictor/pickup-predictor.component';\n\nconst routes: Routes = [\n { path: 'Drivers', component: DriversComponent },\n { path: 'Predictor/Index/:id', component: PredictorComponent },\n { path: 'PickupPredictor', component: PickupPredictorComponent }\n];\n\n@NgModule({\n imports: [\n RouterModule.forRoot(routes)\n ],\n exports: [\n RouterModule\n ]\n})\nexport class AppRoutingModule { }\n","module.exports = \"\"","module.exports = \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJhcHAuY29tcG9uZW50LnNhc3MifQ== */\"","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.sass']\n})\nexport class AppComponent {\n title = 'drivertracker';\n}\n","import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { HttpClientModule } from '@angular/common/http';\nimport { FormsModule } from '@angular/forms';\n\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\n\nimport { AppComponent } from './app.component';\nimport { DriversComponent } from './drivers/drivers.component';\nimport { LegsComponent } from './legs/legs.component';\nimport { AppRoutingModule } from './app-routing.module';\nimport { PredictorComponent } from './predictor/predictor.component';\nimport { PickupPredictorComponent } from './pickup-predictor/pickup-predictor.component';\n\n@NgModule({\n declarations: [\n AppComponent,\n DriversComponent,\n LegsComponent,\n PredictorComponent,\n PickupPredictorComponent\n ],\n imports: [\n BrowserModule,\n HttpClientModule,\n FormsModule,\n AppRoutingModule,\n NgbModule.forRoot()\n ],\n providers: [],\n bootstrap: [AppComponent]\n})\nexport class AppModule { }\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { Driver } from './driver';\nimport { LegService } from './leg.service';\n\nconst httpOptions = {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' })\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DriverService {\n private driversUrl = '/api/driversapi';\n\n getDrivers(): Observable {\n return this.http.get(this.driversUrl);\n }\n\n getDriver(id: number): Observable {\n const url = `${this.driversUrl}/${id}`;\n return this.http.get(url);\n }\n\n\n updateDriver(driver: Driver): Observable {\n const url = `${this.driversUrl}/${driver.driverID}`;\n return this.http.put(url, driver, httpOptions);\n }\n\n addDriver(driver: Driver): Observable {\n const url = `${this.driversUrl}/new`;\n return this.http.post(url, driver, httpOptions);\n }\n\n deleteDriver(driver: Driver | number): Observable {\n const id = typeof driver === 'number' ? driver : driver.driverID;\n const url = `${this.driversUrl}/${id}`;\n return this.http.delete(url, httpOptions);\n }\n\n constructor(\n private http: HttpClient,\n private legService: LegService) { }\n}\n","module.exports = \"\\r\\n

Statistics

\\r\\n
    \\r\\n
  • {{companyStatistics.numOfDrivers}} drivers
  • \\r\\n
  • {{companyStatistics.pickups}} passenger pickups
  • \\r\\n
  • {{companyStatistics.milesDriven}} miles driven
  • \\r\\n
  • Average pickup delay: \\r\\n {{companyStatistics.averagePickupDelay}} minutes
  • \\r\\n
  • Total fares: ${{companyStatistics.totalFares}}
  • \\r\\n
  • Total fuel costs: ${{companyStatistics.totalCosts}}
  • \\r\\n
  • Net profit: ${{companyStatistics.netProfit}}
  • \\r\\n
\\r\\n
\\r\\n\\r\\n

Drivers

\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n Name\\r\\n \\r\\n License Number\\r\\n
\\r\\n \\r\\n {{driver.name}}\\r\\n \\r\\n \\r\\n {{driver.licenseNumber}}\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n Details\\r\\n \\r\\n \\r\\n Predictive Analytics\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
Confirm Delete
\\r\\n \\r\\n
\\r\\n
\\r\\n

Are you sure you want to delete driver {{toDelete.name}}?

\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\"","module.exports = \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJkcml2ZXJzL2RyaXZlcnMuY29tcG9uZW50LnNhc3MifQ== */\"","import { Component, OnInit } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { NgbModal, ModalDismissReasons } from '@ng-bootstrap/ng-bootstrap';\n\nimport { Driver } from '../driver';\nimport { DriverService } from '../driver.service';\nimport { CompanyStatistics } from '../statistics';\nimport { StatisticsService } from '../statistics.service';\n\nconst DELETE_CONFIRMED: string = \"deleteConfirmed\";\nconst DELETE_CANCELLED: string = \"deleteCancelled\";\nconst CROSS_CLICKED: string = \"crossClicked\";\n\n@Component({\n selector: 'app-drivers',\n templateUrl: './drivers.component.html',\n styleUrls: ['./drivers.component.sass']\n})\nexport class DriversComponent implements OnInit {\n\n drivers: Driver[];\n companyStatistics: CompanyStatistics;\n editing: number;\n adding: boolean;\n toDelete: Driver;\n\n getDrivers(): void {\n this.driverService.getDrivers().subscribe(drivers => this.drivers = drivers);\n }\n\n getCompanyStatistics(): void {\n this.statisticsService.getCompanyStatistics()\n .subscribe(stats => this.companyStatistics = stats);\n }\n\n editClicked(driver: Driver): void {\n this.cancelAdd();\n this.editing = driver.driverID;\n }\n \n cancelEdit(): void {\n this.driverService.getDriver(this.editing).subscribe(driver => {\n let dmem: Driver = this.drivers.find(d => d.driverID == this.editing);\n if (dmem !== null && driver !== null) {\n dmem.licenseNumber = driver.licenseNumber;\n dmem.name = driver.name;\n this.editing = 0;\n }\n });\n }\n\n addNew(): void {\n this.cancelEdit();\n this.adding = true;\n }\n\n cancelAdd(): void {\n this.adding = false;\n }\n\n onSubmit(): void {\n if (this.editing !== 0) {\n let driver: Driver = this.drivers.find(d => d.driverID == this.editing);\n this.driverService.updateDriver(driver).subscribe(x => this.editing = 0);\n }\n }\n\n saveNew(name: string, licenseNumber: string): void {\n name = name.trim();\n if (!name) {return;}\n licenseNumber = licenseNumber.trim();\n if (!licenseNumber) {return;}\n\n this.driverService.addDriver({name, licenseNumber} as Driver)\n .subscribe(driver => {\n this.drivers.push(driver);\n this.getCompanyStatistics(); // update to reflect change\n });\n }\n\n showDeleteConfirm(content, driver: Driver) {\n this.toDelete = driver;\n this.modalService.open(content, {ariaLabelledBy: 'deleteConfirmLabel'})\n .result.then((result) => {\n if (result == DELETE_CONFIRMED) {\n this.deleteDriver(driver);\n }\n else {\n this.cancelDelete();\n }\n }, (reason) => {\n this.cancelDelete();\n });\n }\n\n deleteDriver(driver: Driver) {\n this.driverService.deleteDriver(driver).subscribe(x => {\n var indexToDelete = this.drivers.indexOf(this.toDelete, 0);\n this.drivers.splice(indexToDelete, 1);\n this.toDelete = null;\n this.getCompanyStatistics(); // update to reflect change\n });\n }\n\n cancelDelete() {\n this.toDelete = null;\n }\n\n constructor(private driverService: DriverService, \n private statisticsService: StatisticsService,\n private modalService: NgbModal) {\n this.editing = 0;\n this.adding = false;\n }\n\n ngOnInit() {\n this.getDrivers();\n this.getCompanyStatistics();\n }\n\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { LegCoordinates } from './leg-coordinates';\n\nconst httpOptions = {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' })\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GeocodingService {\n private geocodingUrl = \"/api/geocoding\";\n\n getLegCoordinates(id: number): Observable {\n const url = `${this.geocodingUrl}/${id}`;\n return this.http.get(url, httpOptions);\n }\n\n getAddressCoordinates(address: string): Observable {\n const url = `${this.geocodingUrl}/direct/${address}`;\n return this.http.get(url, httpOptions);\n }\n\n constructor(private http: HttpClient) { }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LegService {\n\n constructor() { }\n}\n","module.exports = \"

\\n legs works!\\n

\\n\"","module.exports = \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJsZWdzL2xlZ3MuY29tcG9uZW50LnNhc3MifQ== */\"","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-legs',\n templateUrl: './legs.component.html',\n styleUrls: ['./legs.component.sass']\n})\nexport class LegsComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nconst httpOptions = {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' })\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PickupPredictorService {\n private analysisUrl = '/api/analysisapi';\n\n getFareClassIntervals(): Observable {\n const url = `${this.analysisUrl}/fareclassintervals`;\n return this.http.get(url, httpOptions);\n }\n\n setFareClassIntervals(intervalBounds: number[]): Observable {\n const url = `${this.analysisUrl}/fareclassintervals`;\n return this.http.put(url, intervalBounds, httpOptions);\n }\n\n getFareClassProbabilities(startCoords: number[], endCoords: number[], delay: number, duration: number, pickups: number, interval: number) : Observable {\n const url = `${this.analysisUrl}/fareclassprob/${startCoords[0]}/${startCoords[1]}/${endCoords[0]}/${endCoords[1]}/${delay}/${duration}/${pickups}/${interval}`;\n return this.http.get(url, httpOptions);\n }\n\n getPickupProbabilities(startCoords: number[], endCoords: number[], delay: number, duration: number, fare: number, interval: number): Observable {\n const url = `${this.analysisUrl}/pickupprob/${startCoords[0]}/${startCoords[1]}/${endCoords[0]}/${endCoords[1]}/${delay}/${duration}/${fare}/${interval}`;\n return this.http.get(url, httpOptions);\n }\n\n constructor(private http : HttpClient) { }\n}\n","module.exports = \"

Pickup predictions

\\n

\\n Predict probability of completing given leg and collecting fares.\\n

\\n\\n
\\r\\n

Leg information

\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n

Fare class probabilities

\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n

Pickup probabilities

\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\n\\n

Results

\\n\\n

Fare class probabilities

\\n
\\n
\\n

${{i == 0 ? 0 : fareClassIntervalBoundaries[i-1]}} to ${{fareClassIntervalBoundaries[i]}}:

\\n
\\n
\\n

{{fareClassProbabilities[i] * 100}}%

\\n
\\n
\\n
0\\\">\\r\\n
\\r\\n

${{fareClassIntervalBoundaries[fareClassIntervalBoundaries.length - 1]}}+:

\\r\\n
\\r\\n
\\r\\n

{{fareClassProbabilities[fareClassIntervalBoundaries.length] * 100}}%

\\r\\n
\\r\\n
\\n
\\n\\r\\n

Pickup probabilities

\\r\\n
\\r\\n
\\r\\n

\\n Probability of failure to collect:\\n

\\n

0\\\">\\r\\n Probability of collecting {{i}} passengers:\\r\\n

\\r\\n
\\r\\n
\\r\\n

{{pickupProbabilities[i] * 100}}%

\\r\\n
\\r\\n
\\r\\n
\"","module.exports = \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJwaWNrdXAtcHJlZGljdG9yL3BpY2t1cC1wcmVkaWN0b3IuY29tcG9uZW50LnNjc3MifQ== */\"","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { PickupPredictorService } from '../pickup-predictor.service';\nimport { GeocodingService } from '../geocoding.service';\nimport { Observable, combineLatest } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\n\n@Component({\n selector: 'app-pickup-predictor',\n templateUrl: './pickup-predictor.component.html',\n styleUrls: ['./pickup-predictor.component.scss']\n})\nexport class PickupPredictorComponent implements OnInit {\n constructor(private pickupPredictorService: PickupPredictorService,\n private geocodingService: GeocodingService,\n private aRoute: ActivatedRoute) { }\n\n startAddress: string;\n startCoords: number[];\n endAddress: string;\n endCoords: number[];\n delay: number;\n duration: number;\n interval: number;\n\n pickups: number;\n fare: number;\n\n fareClassProbabilities: number[];\n pickupProbabilities: number[];\n pickupProbabilityIndices: number[];\n\n fareClassIntervalBoundaries: number[];\n fareClassIndices: number[];\n\n geocodeInputAddresses(geoDependent: ((_1: number[], _2: number[]) => Observable)): Observable {\n const startCoords$ = this.geocodingService.getAddressCoordinates(this.startAddress);\n const endCoords$ = this.geocodingService.getAddressCoordinates(this.endAddress);\n\n return combineLatest(startCoords$, endCoords$, (startCoords, endCoords) => ({startCoords, endCoords}))\n .pipe(switchMap(pair => {\n this.startCoords = pair.startCoords;\n this.endCoords = pair.endCoords;\n\n return geoDependent(this.startCoords, this.endCoords);\n }));\n }\n\n onSubmit(): void {\n this.geocodeInputAddresses((s, e) => this.pickupPredictorService.getFareClassProbabilities(\n s, e, this.delay, \n this.duration, this.pickups, this.interval))\n .subscribe(probs => this.fareClassProbabilities = probs);\n }\n \n predictPickupProbabilities(): void {\n this.geocodeInputAddresses((s, e) => this.pickupPredictorService.getPickupProbabilities(\n s, e, this.delay, \n this.duration, this.fare, this.interval))\n .subscribe(probs => {\n this.pickupProbabilities = probs;\n this.pickupProbabilityIndices = (new Array(probs.length)).fill(0).map((x,i)=>i);\n });\n }\n\n ngOnInit() {\n this.pickupPredictorService.getFareClassIntervals()\n .subscribe(bounds => this.fareClassIntervalBoundaries = bounds);\n this.fareClassIndices = (new Array(this.fareClassIntervalBoundaries.length))\n .fill(0).map((x,i)=>i);\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nconst httpOptions = {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' })\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PredictorService {\n private analysisUrl = '/api/analysisapi';\n\n getRidershipProbabilities(driverID: number, delay: number, duration: number, fare: number): Observable {\n const url = `${this.analysisUrl}/multipickupprob/${driverID}/${delay}/${duration}/${fare}`;\n return this.http.get(url, httpOptions);\n }\n\n constructor(private http: HttpClient) { }\n}\n","module.exports = \"

Ridership Prediction for Driver: {{driver.name}}

\\n\\n

\\n Predict how many riders are likely if a pickup occurs.\\n

\\n\\n
\\n
\\n \\n \\n
\\n
\\r\\n \\r\\n \\r\\n
\\n
\\r\\n \\r\\n \\r\\n
\\n \\n
\\n\\n\\r\\n
\\r\\n
\\r\\n

Probability of {{i+2}}+ riders:

\\r\\n
\\r\\n
\\r\\n

{{ridershipProbabilities[i] * 100}}%

\\r\\n
\\r\\n
\\r\\n
\"","module.exports = \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJwcmVkaWN0b3IvcHJlZGljdG9yLmNvbXBvbmVudC5zYXNzIn0= */\"","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\n\nimport { Driver } from '../driver';\nimport { PredictorService } from '../predictor.service';\nimport { DriverService } from '../driver.service';\n\n@Component({\n selector: 'app-predictor',\n templateUrl: './predictor.component.html',\n styleUrls: ['./predictor.component.sass']\n})\nexport class PredictorComponent implements OnInit {\n\n driver: Driver;\n delay: number;\n duration: number;\n fare: number;\n ridershipProbabilities: number[];\n ridershipProbabilityIndices: number[];\n\n getDriver(id: number): void {\n this.driverService.getDriver(id).subscribe(driver => this.driver = driver);\n }\n\n onSubmit(): void {\n\n this.predictorService.getRidershipProbabilities(this.driver.driverID, this.delay, this.duration, this.fare)\n .subscribe(probs => this.ridershipProbabilities = probs);\n }\n\n constructor(private predictorService: PredictorService, \n private driverService: DriverService,\n private aRoute: ActivatedRoute) { \n this.aRoute.params.subscribe(p => this.getDriver(p['id']));\n this.ridershipProbabilityIndices = (new Array(4)).fill(0).map((x,i) => i);\n }\n\n ngOnInit() {\n\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { CompanyStatistics } from './statistics';\n\nconst httpOptions = {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' })\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StatisticsService {\n\n private analysisUrl = '/api/analysisapi';\n\n getCompanyStatistics(): Observable {\n const url = `${this.analysisUrl}/company`\n return this.httpClient.get(url);\n }\n\n constructor(private httpClient: HttpClient) { }\n}\n","// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n production: false\n};\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/dist/zone-error'; // Included with Angular CLI.\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 .catch(err => console.error(err));\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///./src/$_lazy_route_resource lazy namespace object","webpack:///./src/app/app-routing.module.ts","webpack:///./src/app/app.component.html","webpack:///./src/app/app.component.sass","webpack:///./src/app/app.component.ts","webpack:///./src/app/app.module.ts","webpack:///./src/app/driver.service.ts","webpack:///./src/app/drivers/drivers.component.html","webpack:///./src/app/drivers/drivers.component.sass","webpack:///./src/app/drivers/drivers.component.ts","webpack:///./src/app/geocoding.service.ts","webpack:///./src/app/leg.service.ts","webpack:///./src/app/legs/legs.component.html","webpack:///./src/app/legs/legs.component.sass","webpack:///./src/app/legs/legs.component.ts","webpack:///./src/app/pickup-predictor.service.ts","webpack:///./src/app/pickup-predictor/pickup-predictor.component.html","webpack:///./src/app/pickup-predictor/pickup-predictor.component.scss","webpack:///./src/app/pickup-predictor/pickup-predictor.component.ts","webpack:///./src/app/predictor.service.ts","webpack:///./src/app/predictor/predictor.component.html","webpack:///./src/app/predictor/predictor.component.sass","webpack:///./src/app/predictor/predictor.component.ts","webpack:///./src/app/statistics.service.ts","webpack:///./src/environments/environment.ts","webpack:///./src/main.ts"],"names":[],"mappings":"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","file":"main.js","sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"./src/$$_lazy_route_resource lazy recursive\";","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { DriversComponent } from './drivers/drivers.component';\nimport { PredictorComponent } from './predictor/predictor.component';\nimport { PickupPredictorComponent } from './pickup-predictor/pickup-predictor.component';\n\nconst routes: Routes = [\n { path: 'Drivers', component: DriversComponent },\n { path: 'Predictor/Index/:id', component: PredictorComponent },\n { path: 'PickupPredictor', component: PickupPredictorComponent }\n];\n\n@NgModule({\n imports: [\n RouterModule.forRoot(routes)\n ],\n exports: [\n RouterModule\n ]\n})\nexport class AppRoutingModule { }\n","module.exports = \"\"","module.exports = \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2FwcC5jb21wb25lbnQuc2FzcyJ9 */\"","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.sass']\n})\nexport class AppComponent {\n title = 'drivertracker';\n}\n","import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport { HttpClientModule } from '@angular/common/http';\nimport { FormsModule } from '@angular/forms';\n\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\n\nimport { AppComponent } from './app.component';\nimport { DriversComponent } from './drivers/drivers.component';\nimport { LegsComponent } from './legs/legs.component';\nimport { AppRoutingModule } from './app-routing.module';\nimport { PredictorComponent } from './predictor/predictor.component';\nimport { PickupPredictorComponent } from './pickup-predictor/pickup-predictor.component';\n\n@NgModule({\n declarations: [\n AppComponent,\n DriversComponent,\n LegsComponent,\n PredictorComponent,\n PickupPredictorComponent\n ],\n imports: [\n BrowserModule,\n HttpClientModule,\n FormsModule,\n AppRoutingModule,\n NgbModule.forRoot()\n ],\n providers: [],\n bootstrap: [AppComponent]\n})\nexport class AppModule { }\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { Driver } from './driver';\nimport { LegService } from './leg.service';\n\nconst httpOptions = {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' })\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DriverService {\n private driversUrl = '/api/driversapi';\n\n getDrivers(): Observable {\n return this.http.get(this.driversUrl);\n }\n\n getDriver(id: number): Observable {\n const url = `${this.driversUrl}/${id}`;\n return this.http.get(url);\n }\n\n\n updateDriver(driver: Driver): Observable {\n const url = `${this.driversUrl}/${driver.driverID}`;\n return this.http.put(url, driver, httpOptions);\n }\n\n addDriver(driver: Driver): Observable {\n const url = `${this.driversUrl}/new`;\n return this.http.post(url, driver, httpOptions);\n }\n\n deleteDriver(driver: Driver | number): Observable {\n const id = typeof driver === 'number' ? driver : driver.driverID;\n const url = `${this.driversUrl}/${id}`;\n return this.http.delete(url, httpOptions);\n }\n\n constructor(\n private http: HttpClient,\n private legService: LegService) { }\n}\n","module.exports = \"\\r\\n

Statistics

\\r\\n
    \\r\\n
  • {{companyStatistics.numOfDrivers}} drivers
  • \\r\\n
  • {{companyStatistics.pickups}} passenger pickups
  • \\r\\n
  • {{companyStatistics.milesDriven}} miles driven
  • \\r\\n
  • Average pickup delay: \\r\\n {{companyStatistics.averagePickupDelay}} minutes
  • \\r\\n
  • Total fares: ${{companyStatistics.totalFares}}
  • \\r\\n
  • Total fuel costs: ${{companyStatistics.totalCosts}}
  • \\r\\n
  • Net profit: ${{companyStatistics.netProfit}}
  • \\r\\n
\\r\\n
\\r\\n\\r\\n

Drivers

\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n Name\\r\\n \\r\\n License Number\\r\\n
\\r\\n \\r\\n {{driver.name}}\\r\\n \\r\\n \\r\\n {{driver.licenseNumber}}\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n Details\\r\\n \\r\\n \\r\\n Predictive Analytics\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
Confirm Delete
\\r\\n \\r\\n
\\r\\n
\\r\\n

Are you sure you want to delete driver {{toDelete.name}}?

\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\"","module.exports = \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2RyaXZlcnMvZHJpdmVycy5jb21wb25lbnQuc2FzcyJ9 */\"","import { Component, OnInit } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { NgbModal, ModalDismissReasons } from '@ng-bootstrap/ng-bootstrap';\n\nimport { Driver } from '../driver';\nimport { DriverService } from '../driver.service';\nimport { CompanyStatistics } from '../statistics';\nimport { StatisticsService } from '../statistics.service';\n\nconst DELETE_CONFIRMED: string = \"deleteConfirmed\";\nconst DELETE_CANCELLED: string = \"deleteCancelled\";\nconst CROSS_CLICKED: string = \"crossClicked\";\n\n@Component({\n selector: 'app-drivers',\n templateUrl: './drivers.component.html',\n styleUrls: ['./drivers.component.sass']\n})\nexport class DriversComponent implements OnInit {\n\n drivers: Driver[];\n companyStatistics: CompanyStatistics;\n editing: number;\n adding: boolean;\n toDelete: Driver;\n\n getDrivers(): void {\n this.driverService.getDrivers().subscribe(drivers => this.drivers = drivers);\n }\n\n getCompanyStatistics(): void {\n this.statisticsService.getCompanyStatistics()\n .subscribe(stats => this.companyStatistics = stats);\n }\n\n editClicked(driver: Driver): void {\n this.cancelAdd();\n this.editing = driver.driverID;\n }\n \n cancelEdit(): void {\n this.driverService.getDriver(this.editing).subscribe(driver => {\n let dmem: Driver = this.drivers.find(d => d.driverID == this.editing);\n if (dmem !== null && driver !== null) {\n dmem.licenseNumber = driver.licenseNumber;\n dmem.name = driver.name;\n this.editing = 0;\n }\n });\n }\n\n addNew(): void {\n this.cancelEdit();\n this.adding = true;\n }\n\n cancelAdd(): void {\n this.adding = false;\n }\n\n onSubmit(): void {\n if (this.editing !== 0) {\n let driver: Driver = this.drivers.find(d => d.driverID == this.editing);\n this.driverService.updateDriver(driver).subscribe(x => this.editing = 0);\n }\n }\n\n saveNew(name: string, licenseNumber: string): void {\n name = name.trim();\n if (!name) {return;}\n licenseNumber = licenseNumber.trim();\n if (!licenseNumber) {return;}\n\n this.driverService.addDriver({name, licenseNumber} as Driver)\n .subscribe(driver => {\n this.drivers.push(driver);\n this.getCompanyStatistics(); // update to reflect change\n });\n }\n\n showDeleteConfirm(content, driver: Driver) {\n this.toDelete = driver;\n this.modalService.open(content, {ariaLabelledBy: 'deleteConfirmLabel'})\n .result.then((result) => {\n if (result == DELETE_CONFIRMED) {\n this.deleteDriver(driver);\n }\n else {\n this.cancelDelete();\n }\n }, (reason) => {\n this.cancelDelete();\n });\n }\n\n deleteDriver(driver: Driver) {\n this.driverService.deleteDriver(driver).subscribe(x => {\n var indexToDelete = this.drivers.indexOf(this.toDelete, 0);\n this.drivers.splice(indexToDelete, 1);\n this.toDelete = null;\n this.getCompanyStatistics(); // update to reflect change\n });\n }\n\n cancelDelete() {\n this.toDelete = null;\n }\n\n constructor(private driverService: DriverService, \n private statisticsService: StatisticsService,\n private modalService: NgbModal) {\n this.editing = 0;\n this.adding = false;\n }\n\n ngOnInit() {\n this.getDrivers();\n this.getCompanyStatistics();\n }\n\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { LegCoordinates } from './leg-coordinates';\n\nconst httpOptions = {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' })\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GeocodingService {\n private geocodingUrl = \"/api/geocoding\";\n\n getLegCoordinates(id: number): Observable {\n const url = `${this.geocodingUrl}/${id}`;\n return this.http.get(url, httpOptions);\n }\n\n getAddressCoordinates(address: string): Observable {\n const url = `${this.geocodingUrl}/direct/${address}`;\n return this.http.get(url, httpOptions);\n }\n\n constructor(private http: HttpClient) { }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LegService {\n\n constructor() { }\n}\n","module.exports = \"

\\n legs works!\\n

\\n\"","module.exports = \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2xlZ3MvbGVncy5jb21wb25lbnQuc2FzcyJ9 */\"","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-legs',\n templateUrl: './legs.component.html',\n styleUrls: ['./legs.component.sass']\n})\nexport class LegsComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nconst httpOptions = {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' })\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PickupPredictorService {\n private analysisUrl = '/api/analysisapi';\n\n getFareClassIntervals(): Observable {\n const url = `${this.analysisUrl}/fareclassintervals`;\n return this.http.get(url, httpOptions);\n }\n\n setFareClassIntervals(intervalBounds: number[]): Observable {\n const url = `${this.analysisUrl}/fareclassintervals`;\n return this.http.put(url, intervalBounds, httpOptions);\n }\n\n getFareClassProbabilities(startCoords: number[], endCoords: number[], delay: number, duration: number, pickups: number, interval: number) : Observable {\n const url = `${this.analysisUrl}/fareclassprob/${startCoords[0]}/${startCoords[1]}/${endCoords[0]}/${endCoords[1]}/${delay}/${duration}/${pickups}/${interval}`;\n return this.http.get(url, httpOptions);\n }\n\n getPickupProbabilities(startCoords: number[], endCoords: number[], delay: number, duration: number, fare: number, interval: number): Observable {\n const url = `${this.analysisUrl}/pickupprob/${startCoords[0]}/${startCoords[1]}/${endCoords[0]}/${endCoords[1]}/${delay}/${duration}/${fare}/${interval}`;\n return this.http.get(url, httpOptions);\n }\n\n constructor(private http : HttpClient) { }\n}\n","module.exports = \"

Pickup predictions

\\r\\n

\\r\\n Predict probability of completing given leg and collecting fares.\\r\\n

\\r\\n\\r\\n
\\r\\n

Leg information

\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n

Fare class probabilities

\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n

Pickup probabilities

\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n

Results

\\r\\n\\r\\n

Fare class probabilities

\\r\\n
\\r\\n
\\r\\n

${{i == 0 ? 0 : fareClassIntervalBoundaries[i-1]}} to ${{fareClassIntervalBoundaries[i]}}:

\\r\\n
\\r\\n
\\r\\n

{{fareClassProbabilities[i] * 100}}%

\\r\\n
\\r\\n
\\r\\n
0\\\">\\r\\n
\\r\\n

${{fareClassIntervalBoundaries[fareClassIntervalBoundaries.length - 1]}}+:

\\r\\n
\\r\\n
\\r\\n

{{fareClassProbabilities[fareClassIntervalBoundaries.length] * 100}}%

\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n

Pickup probabilities

\\r\\n
\\r\\n
\\r\\n

\\r\\n Probability of failure to collect:\\r\\n

\\r\\n

0\\\">\\r\\n Probability of collecting {{i}} passengers:\\r\\n

\\r\\n
\\r\\n
\\r\\n

{{pickupProbabilities[i] * 100}}%

\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\"","module.exports = \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL3BpY2t1cC1wcmVkaWN0b3IvcGlja3VwLXByZWRpY3Rvci5jb21wb25lbnQuc2NzcyJ9 */\"","import { Component, OnInit, AfterViewChecked } from '@angular/core';\nimport { ViewportScroller } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { PickupPredictorService } from '../pickup-predictor.service';\nimport { GeocodingService } from '../geocoding.service';\nimport { Observable, combineLatest } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\n\n@Component({\n selector: 'app-pickup-predictor',\n templateUrl: './pickup-predictor.component.html',\n styleUrls: ['./pickup-predictor.component.scss']\n})\nexport class PickupPredictorComponent implements OnInit, AfterViewChecked {\n constructor(private pickupPredictorService: PickupPredictorService,\n private geocodingService: GeocodingService,\n private aRoute: ActivatedRoute,\n private viewportScroller: ViewportScroller) { }\n\n startAddress: string;\n startCoords: number[];\n endAddress: string;\n endCoords: number[];\n delay: number;\n duration: number;\n interval: number;\n\n pickups: number;\n fare: number;\n\n fareClassProbabilities: number[];\n pickupProbabilities: number[];\n pickupProbabilityIndices: number[];\n\n fareClassIntervalBoundaries: number[];\n fareClassIndices: number[];\n\n // so AfterViewChecked knows when to scroll\n resultsJustComputed: boolean;\n\n geocodeInputAddresses(geoDependent: ((_1: number[], _2: number[]) => Observable)): Observable {\n const startCoords$ = this.geocodingService.getAddressCoordinates(this.startAddress);\n const endCoords$ = this.geocodingService.getAddressCoordinates(this.endAddress);\n\n return combineLatest(startCoords$, endCoords$, (startCoords, endCoords) => ({startCoords, endCoords}))\n .pipe(switchMap(pair => {\n this.startCoords = pair.startCoords;\n this.endCoords = pair.endCoords;\n\n return geoDependent(this.startCoords, this.endCoords);\n }));\n }\n\n onSubmit(): void {\n this.geocodeInputAddresses((s, e) => this.pickupPredictorService.getFareClassProbabilities(\n s, e, this.delay, \n this.duration, this.pickups, this.interval))\n .subscribe(probs => {\n this.resultsJustComputed = true; \n this.fareClassProbabilities = probs;\n });\n }\n \n predictPickupProbabilities(): void {\n this.geocodeInputAddresses((s, e) => this.pickupPredictorService.getPickupProbabilities(\n s, e, this.delay, \n this.duration, this.fare, this.interval))\n .subscribe(probs => {\n this.resultsJustComputed = true;\n this.pickupProbabilities = probs;\n this.pickupProbabilityIndices = (new Array(probs.length)).fill(0).map((x,i)=>i);\n });\n }\n\n ngOnInit() {\n this.resultsJustComputed = false;\n this.pickupPredictorService.getFareClassIntervals()\n .subscribe(bounds => {\n this.fareClassIntervalBoundaries = bounds;\n this.fareClassIndices = (new Array(this.fareClassIntervalBoundaries.length))\n .fill(0).map((x,i)=>i);\n });\n\n }\n\n ngAfterViewChecked() {\n if (this.resultsJustComputed) {\n this.scrollToResults();\n this.resultsJustComputed = false;\n }\n }\n\n scrollToResults() {\n this.viewportScroller.scrollToAnchor(\"pickupPredictionResults\");\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nconst httpOptions = {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' })\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PredictorService {\n private analysisUrl = '/api/analysisapi';\n\n getRidershipProbabilities(driverID: number, delay: number, duration: number, fare: number): Observable {\n const url = `${this.analysisUrl}/multipickupprob/${driverID}/${delay}/${duration}/${fare}`;\n return this.http.get(url, httpOptions);\n }\n\n constructor(private http: HttpClient) { }\n}\n","module.exports = \"

Ridership Prediction for Driver: {{driver.name}}

\\n\\n

\\n Predict how many riders are likely if a pickup occurs.\\n

\\n\\n
\\n
\\n \\n \\n
\\n
\\r\\n \\r\\n \\r\\n
\\n
\\r\\n \\r\\n \\r\\n
\\n \\n
\\n\\n\\r\\n
\\r\\n
\\r\\n

Probability of {{i+2}}+ riders:

\\r\\n
\\r\\n
\\r\\n

{{ridershipProbabilities[i] * 100}}%

\\r\\n
\\r\\n
\\r\\n
\"","module.exports = \"\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL3ByZWRpY3Rvci9wcmVkaWN0b3IuY29tcG9uZW50LnNhc3MifQ== */\"","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\n\nimport { Driver } from '../driver';\nimport { PredictorService } from '../predictor.service';\nimport { DriverService } from '../driver.service';\n\n@Component({\n selector: 'app-predictor',\n templateUrl: './predictor.component.html',\n styleUrls: ['./predictor.component.sass']\n})\nexport class PredictorComponent implements OnInit {\n\n driver: Driver;\n delay: number;\n duration: number;\n fare: number;\n ridershipProbabilities: number[];\n ridershipProbabilityIndices: number[];\n\n getDriver(id: number): void {\n this.driverService.getDriver(id).subscribe(driver => this.driver = driver);\n }\n\n onSubmit(): void {\n\n this.predictorService.getRidershipProbabilities(this.driver.driverID, this.delay, this.duration, this.fare)\n .subscribe(probs => this.ridershipProbabilities = probs);\n }\n\n constructor(private predictorService: PredictorService, \n private driverService: DriverService,\n private aRoute: ActivatedRoute) { \n this.aRoute.params.subscribe(p => this.getDriver(p['id']));\n this.ridershipProbabilityIndices = (new Array(4)).fill(0).map((x,i) => i);\n }\n\n ngOnInit() {\n\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { CompanyStatistics } from './statistics';\n\nconst httpOptions = {\n headers: new HttpHeaders({ 'Content-Type': 'application/json' })\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StatisticsService {\n\n private analysisUrl = '/api/analysisapi';\n\n getCompanyStatistics(): Observable {\n const url = `${this.analysisUrl}/company`\n return this.httpClient.get(url);\n }\n\n constructor(private httpClient: HttpClient) { }\n}\n","// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n production: false\n};\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/dist/zone-error'; // Included with Angular CLI.\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 .catch(err => console.error(err));\n"],"sourceRoot":""} \ No newline at end of file diff --git a/DriverTracker/wwwroot/libs/styles.js b/DriverTracker/wwwroot/libs/styles.js index 6b05e00..43c6618 100644 --- a/DriverTracker/wwwroot/libs/styles.js +++ b/DriverTracker/wwwroot/libs/styles.js @@ -7,7 +7,7 @@ /*! no static exports found */ /***/ (function(module, exports) { -module.exports = [[module.i, "/* You can add global styles to this file, and also import other style files */\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9kYXZpZG5pc3Nvbi9Qcm9qZWN0cy9Ecml2ZXJUcmFja2VyL0RyaXZlclRyYWNrZXIvc3JjL3N0eWxlcy5zYXNzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhFQUFBIiwiZmlsZSI6Ii4uL3N0eWxlcy5zYXNzIiwic291cmNlc0NvbnRlbnQiOlsiLyogWW91IGNhbiBhZGQgZ2xvYmFsIHN0eWxlcyB0byB0aGlzIGZpbGUsIGFuZCBhbHNvIGltcG9ydCBvdGhlciBzdHlsZSBmaWxlcyAqL1xuIl19 */", '', '']] +module.exports = [[module.i, "/* You can add global styles to this file, and also import other style files */\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9kYXZpZG5pc3Nvbi9Qcm9qZWN0cy9Ecml2ZXJUcmFja2VyL0RyaXZlclRyYWNrZXIvc3JjL3N0eWxlcy5zYXNzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhFQUFBIiwiZmlsZSI6InNyYy9zdHlsZXMuc2FzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIFlvdSBjYW4gYWRkIGdsb2JhbCBzdHlsZXMgdG8gdGhpcyBmaWxlLCBhbmQgYWxzbyBpbXBvcnQgb3RoZXIgc3R5bGUgZmlsZXMgKi9cbiJdfQ== */", '', '']] /***/ }), diff --git a/DriverTracker/wwwroot/libs/styles.js.map b/DriverTracker/wwwroot/libs/styles.js.map index 67bbc09..7940365 100644 --- a/DriverTracker/wwwroot/libs/styles.js.map +++ b/DriverTracker/wwwroot/libs/styles.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///./src/styles.sass","webpack:///./node_modules/style-loader/lib/addStyles.js","webpack:///./node_modules/style-loader/lib/urls.js","webpack:///./src/styles.sass?73c2"],"names":[],"mappings":";;;;;;;;;AAAA,mBAAmB,QAAS,iIAAiI,iX;;;;;;;;;;;ACA7J;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA,cAAc,mBAAO,CAAC,uDAAQ;;AAE9B;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA,iBAAiB,mBAAmB;AACpC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA,mBAAmB,2BAA2B;;AAE9C;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,mBAAmB;AACnC;AACA;;AAEA;AACA;;AAEA,iBAAiB,2BAA2B;AAC5C;AACA;;AAEA,QAAQ,uBAAuB;AAC/B;AACA;AACA,GAAG;AACH;;AAEA,iBAAiB,uBAAuB;AACxC;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd,kDAAkD,sBAAsB;AACxE;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA,KAAK,KAAwC,EAAE,EAE7C;;AAEF,QAAQ,sBAAiB;AACzB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD;AACvD;;AAEA,6BAA6B,mBAAmB;;AAEhD;;AAEA;;AAEA;AACA;;;;;;;;;;;;;AC9YA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,WAAW,EAAE;AACrD,wCAAwC,WAAW,EAAE;;AAErD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,sCAAsC;AACtC,GAAG;AACH;AACA,8DAA8D;AAC9D;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;;;;;;;;;;;;;ACvFA,cAAc,mBAAO,CAAC,4ZAA0N;;AAEhP,4CAA4C,QAAS;;AAErD;AACA;;;;AAIA,eAAe;;AAEf;AACA;;AAEA,aAAa,mBAAO,CAAC,mGAAgD;;AAErE;;AAEA,GAAG,KAAU,EAAE,E","file":"styles.js","sourcesContent":["module.exports = [[module.id, \"/* You can add global styles to this file, and also import other style files */\\n\\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9kYXZpZG5pc3Nvbi9Qcm9qZWN0cy9Ecml2ZXJUcmFja2VyL0RyaXZlclRyYWNrZXIvc3JjL3N0eWxlcy5zYXNzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhFQUFBIiwiZmlsZSI6Ii4uL3N0eWxlcy5zYXNzIiwic291cmNlc0NvbnRlbnQiOlsiLyogWW91IGNhbiBhZGQgZ2xvYmFsIHN0eWxlcyB0byB0aGlzIGZpbGUsIGFuZCBhbHNvIGltcG9ydCBvdGhlciBzdHlsZSBmaWxlcyAqL1xuIl19 */\", '', '']]","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getTarget = function (target, parent) {\n if (parent){\n return parent.querySelector(target);\n }\n return document.querySelector(target);\n};\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(target, parent) {\n // If passing function in options, then use it for resolve \"head\" element.\n // Useful for Shadow Root style i.e\n // {\n // insertInto: function () { return document.querySelector(\"#foo\").shadowRoot }\n // }\n if (typeof target === 'function') {\n return target();\n }\n if (typeof memo[target] === \"undefined\") {\n\t\t\tvar styleTarget = getTarget.call(this, target, parent);\n\t\t\t// Special case to return head of iframe instead of iframe itself\n\t\t\tif (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n\t\t\t\ttry {\n\t\t\t\t\t// This will throw an exception if access to iframe is blocked\n\t\t\t\t\t// due to cross-origin restrictions\n\t\t\t\t\tstyleTarget = styleTarget.contentDocument.head;\n\t\t\t\t} catch(e) {\n\t\t\t\t\tstyleTarget = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmemo[target] = styleTarget;\n\t\t}\n\t\treturn memo[target]\n\t};\n})();\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = require(\"./urls\");\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \"undefined\" && DEBUG) {\n\t\tif (typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \"object\" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of