init
							
								
								
									
										10
									
								
								src/app/app-routing.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,10 @@
 | 
			
		||||
import { NgModule } from '@angular/core';
 | 
			
		||||
import { Routes, RouterModule } from '@angular/router';
 | 
			
		||||
 | 
			
		||||
const routes: Routes = [];
 | 
			
		||||
 | 
			
		||||
@NgModule({
 | 
			
		||||
  imports: [RouterModule.forRoot(routes)],
 | 
			
		||||
  exports: [RouterModule]
 | 
			
		||||
})
 | 
			
		||||
export class AppRoutingModule { }
 | 
			
		||||
							
								
								
									
										31
									
								
								src/app/app.component.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,31 @@
 | 
			
		||||
import { Component } from '@angular/core';
 | 
			
		||||
 | 
			
		||||
@Component({
 | 
			
		||||
  selector: 'app-root',
 | 
			
		||||
  template: `
 | 
			
		||||
    <!--The content below is only a placeholder and can be replaced.-->
 | 
			
		||||
    <div style="text-align:center">
 | 
			
		||||
      <h1>
 | 
			
		||||
        Welcome to {{title}}!
 | 
			
		||||
      </h1>
 | 
			
		||||
      <img width="300" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTAgMjUwIj4KICAgIDxwYXRoIGZpbGw9IiNERDAwMzEiIGQ9Ik0xMjUgMzBMMzEuOSA2My4ybDE0LjIgMTIzLjFMMTI1IDIzMGw3OC45LTQzLjcgMTQuMi0xMjMuMXoiIC8+CiAgICA8cGF0aCBmaWxsPSIjQzMwMDJGIiBkPSJNMTI1IDMwdjIyLjItLjFWMjMwbDc4LjktNDMuNyAxNC4yLTEyMy4xTDEyNSAzMHoiIC8+CiAgICA8cGF0aCAgZmlsbD0iI0ZGRkZGRiIgZD0iTTEyNSA1Mi4xTDY2LjggMTgyLjZoMjEuN2wxMS43LTI5LjJoNDkuNGwxMS43IDI5LjJIMTgzTDEyNSA1Mi4xem0xNyA4My4zaC0zNGwxNy00MC45IDE3IDQwLjl6IiAvPgogIDwvc3ZnPg==">
 | 
			
		||||
    </div>
 | 
			
		||||
    <h2>Here are some links to help you start: </h2>
 | 
			
		||||
    <ul>
 | 
			
		||||
      <li>
 | 
			
		||||
        <h2><a target="_blank" rel="noopener" href="https://angular.io/tutorial">Tour of Heroes</a></h2>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li>
 | 
			
		||||
        <h2><a target="_blank" rel="noopener" href="https://angular.io/cli">CLI Documentation</a></h2>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li>
 | 
			
		||||
        <h2><a target="_blank" rel="noopener" href="https://blog.angular.io/">Angular blog</a></h2>
 | 
			
		||||
      </li>
 | 
			
		||||
    </ul>
 | 
			
		||||
    <router-outlet></router-outlet>
 | 
			
		||||
  `,
 | 
			
		||||
  styles: []
 | 
			
		||||
})
 | 
			
		||||
export class AppComponent {
 | 
			
		||||
  title = 'MapAlliance';
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										28
									
								
								src/app/app.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,28 @@
 | 
			
		||||
import {BrowserModule} from '@angular/platform-browser';
 | 
			
		||||
import {NgModule} from '@angular/core';
 | 
			
		||||
 | 
			
		||||
import {AppRoutingModule} from './app-routing.module';
 | 
			
		||||
import {AppComponent} from './app.component';
 | 
			
		||||
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
 | 
			
		||||
import {ServiceWorkerModule} from '@angular/service-worker';
 | 
			
		||||
import {environment} from '../environments/environment';
 | 
			
		||||
import {FormsModule} from "@angular/forms";
 | 
			
		||||
import {MatSnackBarModule} from "@angular/material";
 | 
			
		||||
 | 
			
		||||
@NgModule({
 | 
			
		||||
    declarations: [
 | 
			
		||||
        AppComponent
 | 
			
		||||
    ],
 | 
			
		||||
    imports: [
 | 
			
		||||
        BrowserModule,
 | 
			
		||||
        AppRoutingModule,
 | 
			
		||||
        BrowserAnimationsModule,
 | 
			
		||||
        FormsModule,
 | 
			
		||||
        MatSnackBarModule,
 | 
			
		||||
        ServiceWorkerModule.register('ngsw-worker.js', {enabled: environment.production})
 | 
			
		||||
    ],
 | 
			
		||||
    providers: [],
 | 
			
		||||
    bootstrap: [AppComponent]
 | 
			
		||||
})
 | 
			
		||||
export class AppModule {
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								src/app/geolocation/geolocation.service.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,39 @@
 | 
			
		||||
import {Injectable} from '@angular/core';
 | 
			
		||||
import {BehaviorSubject} from "rxjs";
 | 
			
		||||
import {MatSnackBar} from "@angular/material";
 | 
			
		||||
 | 
			
		||||
@Injectable({
 | 
			
		||||
    providedIn: 'root'
 | 
			
		||||
})
 | 
			
		||||
export class GeolocationService {
 | 
			
		||||
    location = new BehaviorSubject(null);
 | 
			
		||||
 | 
			
		||||
    constructor(private snackBar: MatSnackBar) {
 | 
			
		||||
        if(navigator.geolocation) {
 | 
			
		||||
            navigator.geolocation.getCurrentPosition(this.updatePosition, this.errorHandler);
 | 
			
		||||
        } else {
 | 
			
		||||
            snackBar.open('Geolocation is not supported', null, {horizontalPosition: 'right', panelClass: 'bg-warn'});
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    updatePosition(position) {
 | 
			
		||||
        this.location.next(position);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    errorHandler(error) {
 | 
			
		||||
        switch(error.code) {
 | 
			
		||||
            case error.PERMISSION_DENIED:
 | 
			
		||||
                this.snackBar.open('Geolocation permission denied', null, {horizontalPosition: 'right', panelClass: 'bg-warn'});
 | 
			
		||||
                break;
 | 
			
		||||
            case error.POSITION_UNAVAILABLE:
 | 
			
		||||
                this.snackBar.open('Geolocation unavailable', null, {horizontalPosition: 'right', panelClass: 'bg-warn'});
 | 
			
		||||
                break;
 | 
			
		||||
            case error.TIMEOUT:
 | 
			
		||||
                this.snackBar.open('Geolocation timeout', null, {horizontalPosition: 'right', panelClass: 'bg-warn'});
 | 
			
		||||
                break;
 | 
			
		||||
            case error.UNKNOWN_ERROR:
 | 
			
		||||
                this.snackBar.open('Geolocation experienced an unknown error', null, {horizontalPosition: 'right', panelClass: 'bg-warn'});
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										0
									
								
								src/assets/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								src/assets/icons/icon-128x128.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.2 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/icons/icon-144x144.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/icons/icon-152x152.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/icons/icon-192x192.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.7 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/icons/icon-384x384.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 3.5 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/icons/icon-512x512.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 4.9 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/icons/icon-72x72.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 792 B  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/icons/icon-96x96.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 958 B  | 
							
								
								
									
										3
									
								
								src/environments/environment.prod.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,3 @@
 | 
			
		||||
export const environment = {
 | 
			
		||||
  production: true
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										16
									
								
								src/environments/environment.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,16 @@
 | 
			
		||||
// This file can be replaced during build by using the `fileReplacements` array.
 | 
			
		||||
// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.
 | 
			
		||||
// The list of file replacements can be found in `angular.json`.
 | 
			
		||||
 | 
			
		||||
export const environment = {
 | 
			
		||||
  production: false
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * For easier debugging in development mode, you can import the following file
 | 
			
		||||
 * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.
 | 
			
		||||
 *
 | 
			
		||||
 * This import should be commented out in production mode because it will have a negative impact
 | 
			
		||||
 * on performance if an error is thrown.
 | 
			
		||||
 */
 | 
			
		||||
// import 'zone.js/dist/zone-error';  // Included with Angular CLI.
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								src/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 5.3 KiB  | 
							
								
								
									
										19
									
								
								src/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,19 @@
 | 
			
		||||
<!doctype html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
  <meta charset="utf-8">
 | 
			
		||||
  <title>MapAlliance</title>
 | 
			
		||||
  <base href="/">
 | 
			
		||||
 | 
			
		||||
  <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
			
		||||
  <link rel="icon" type="image/x-icon" href="favicon.ico">
 | 
			
		||||
  <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet">
 | 
			
		||||
  <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
 | 
			
		||||
  <link rel="manifest" href="manifest.webmanifest">
 | 
			
		||||
  <meta name="theme-color" content="#1976d2">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
  <app-root></app-root>
 | 
			
		||||
  <noscript>Please enable JavaScript to continue using this application.</noscript>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										13
									
								
								src/main.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,13 @@
 | 
			
		||||
import 'hammerjs';
 | 
			
		||||
import { enableProdMode } from '@angular/core';
 | 
			
		||||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
 | 
			
		||||
 | 
			
		||||
import { AppModule } from './app/app.module';
 | 
			
		||||
import { environment } from './environments/environment';
 | 
			
		||||
 | 
			
		||||
if (environment.production) {
 | 
			
		||||
  enableProdMode();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
platformBrowserDynamic().bootstrapModule(AppModule)
 | 
			
		||||
  .catch(err => console.error(err));
 | 
			
		||||
							
								
								
									
										51
									
								
								src/manifest.webmanifest
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,51 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "MapAlliance",
 | 
			
		||||
  "short_name": "MapAlliance",
 | 
			
		||||
  "theme_color": "#1976d2",
 | 
			
		||||
  "background_color": "#fafafa",
 | 
			
		||||
  "display": "standalone",
 | 
			
		||||
  "scope": "/",
 | 
			
		||||
  "start_url": "/",
 | 
			
		||||
  "icons": [
 | 
			
		||||
    {
 | 
			
		||||
      "src": "assets/icons/icon-72x72.png",
 | 
			
		||||
      "sizes": "72x72",
 | 
			
		||||
      "type": "image/png"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "src": "assets/icons/icon-96x96.png",
 | 
			
		||||
      "sizes": "96x96",
 | 
			
		||||
      "type": "image/png"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "src": "assets/icons/icon-128x128.png",
 | 
			
		||||
      "sizes": "128x128",
 | 
			
		||||
      "type": "image/png"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "src": "assets/icons/icon-144x144.png",
 | 
			
		||||
      "sizes": "144x144",
 | 
			
		||||
      "type": "image/png"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "src": "assets/icons/icon-152x152.png",
 | 
			
		||||
      "sizes": "152x152",
 | 
			
		||||
      "type": "image/png"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "src": "assets/icons/icon-192x192.png",
 | 
			
		||||
      "sizes": "192x192",
 | 
			
		||||
      "type": "image/png"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "src": "assets/icons/icon-384x384.png",
 | 
			
		||||
      "sizes": "384x384",
 | 
			
		||||
      "type": "image/png"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "src": "assets/icons/icon-512x512.png",
 | 
			
		||||
      "sizes": "512x512",
 | 
			
		||||
      "type": "image/png"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										63
									
								
								src/polyfills.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,63 @@
 | 
			
		||||
/**
 | 
			
		||||
 * This file includes polyfills needed by Angular and is loaded before the app.
 | 
			
		||||
 * You can add your own extra polyfills to this file.
 | 
			
		||||
 *
 | 
			
		||||
 * This file is divided into 2 sections:
 | 
			
		||||
 *   1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
 | 
			
		||||
 *   2. Application imports. Files imported after ZoneJS that should be loaded before your main
 | 
			
		||||
 *      file.
 | 
			
		||||
 *
 | 
			
		||||
 * The current setup is for so-called "evergreen" browsers; the last versions of browsers that
 | 
			
		||||
 * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
 | 
			
		||||
 * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
 | 
			
		||||
 *
 | 
			
		||||
 * Learn more in https://angular.io/guide/browser-support
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/***************************************************************************************************
 | 
			
		||||
 * BROWSER POLYFILLS
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/** IE10 and IE11 requires the following for NgClass support on SVG elements */
 | 
			
		||||
// import 'classlist.js';  // Run `npm install --save classlist.js`.
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Web Animations `@angular/platform-browser/animations`
 | 
			
		||||
 * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.
 | 
			
		||||
 * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).
 | 
			
		||||
 */
 | 
			
		||||
// import 'web-animations-js';  // Run `npm install --save web-animations-js`.
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * By default, zone.js will patch all possible macroTask and DomEvents
 | 
			
		||||
 * user can disable parts of macroTask/DomEvents patch by setting following flags
 | 
			
		||||
 * because those flags need to be set before `zone.js` being loaded, and webpack
 | 
			
		||||
 * will put import in the top of bundle, so user need to create a separate file
 | 
			
		||||
 * in this directory (for example: zone-flags.ts), and put the following flags
 | 
			
		||||
 * into that file, and then add the following code before importing zone.js.
 | 
			
		||||
 * import './zone-flags.ts';
 | 
			
		||||
 *
 | 
			
		||||
 * The flags allowed in zone-flags.ts are listed here.
 | 
			
		||||
 *
 | 
			
		||||
 * The following flags will work for all browsers.
 | 
			
		||||
 *
 | 
			
		||||
 * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame
 | 
			
		||||
 * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick
 | 
			
		||||
 * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames
 | 
			
		||||
 *
 | 
			
		||||
 *  in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js
 | 
			
		||||
 *  with the following flag, it will bypass `zone.js` patch for IE/Edge
 | 
			
		||||
 *
 | 
			
		||||
 *  (window as any).__Zone_enable_cross_context_check = true;
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/***************************************************************************************************
 | 
			
		||||
 * Zone JS is required by default for Angular itself.
 | 
			
		||||
 */
 | 
			
		||||
import 'zone.js/dist/zone';  // Included with Angular CLI.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/***************************************************************************************************
 | 
			
		||||
 * APPLICATION IMPORTS
 | 
			
		||||
 */
 | 
			
		||||
							
								
								
									
										4
									
								
								src/styles.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
			
		||||
/* You can add global styles to this file, and also import other style files */
 | 
			
		||||
 | 
			
		||||
html, body { height: 100%; }
 | 
			
		||||
body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; }
 | 
			
		||||