Version 3 #67
@ -1,8 +0,0 @@
 | 
			
		||||
#!/snap/bin/pwsh
 | 
			
		||||
Set-Location ./src/my-prayer-journal
 | 
			
		||||
npm run build
 | 
			
		||||
if ($?) {
 | 
			
		||||
  Copy-Item ./dist/my-prayer-journal/* ../MyPrayerJournal.Api/wwwroot
 | 
			
		||||
  Set-Location ../MyPrayerJournal.Api
 | 
			
		||||
  dotnet run
 | 
			
		||||
}
 | 
			
		||||
@ -1,16 +0,0 @@
 | 
			
		||||
# Editor configuration, see https://editorconfig.org
 | 
			
		||||
root = true
 | 
			
		||||
 | 
			
		||||
[*]
 | 
			
		||||
charset = utf-8
 | 
			
		||||
indent_style = space
 | 
			
		||||
indent_size = 2
 | 
			
		||||
insert_final_newline = true
 | 
			
		||||
trim_trailing_whitespace = true
 | 
			
		||||
 | 
			
		||||
[*.ts]
 | 
			
		||||
quote_type = single
 | 
			
		||||
 | 
			
		||||
[*.md]
 | 
			
		||||
max_line_length = off
 | 
			
		||||
trim_trailing_whitespace = false
 | 
			
		||||
							
								
								
									
										46
									
								
								src/my-prayer-journal/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										46
									
								
								src/my-prayer-journal/.gitignore
									
									
									
									
										vendored
									
									
								
							@ -1,46 +0,0 @@
 | 
			
		||||
# See http://help.github.com/ignore-files/ for more about ignoring files.
 | 
			
		||||
 | 
			
		||||
# compiled output
 | 
			
		||||
/dist
 | 
			
		||||
/tmp
 | 
			
		||||
/out-tsc
 | 
			
		||||
# Only exists if Bazel was run
 | 
			
		||||
/bazel-out
 | 
			
		||||
 | 
			
		||||
# dependencies
 | 
			
		||||
/node_modules
 | 
			
		||||
 | 
			
		||||
# profiling files
 | 
			
		||||
chrome-profiler-events*.json
 | 
			
		||||
speed-measure-plugin*.json
 | 
			
		||||
 | 
			
		||||
# IDEs and editors
 | 
			
		||||
/.idea
 | 
			
		||||
.project
 | 
			
		||||
.classpath
 | 
			
		||||
.c9/
 | 
			
		||||
*.launch
 | 
			
		||||
.settings/
 | 
			
		||||
*.sublime-workspace
 | 
			
		||||
 | 
			
		||||
# IDE - VSCode
 | 
			
		||||
.vscode/*
 | 
			
		||||
!.vscode/settings.json
 | 
			
		||||
!.vscode/tasks.json
 | 
			
		||||
!.vscode/launch.json
 | 
			
		||||
!.vscode/extensions.json
 | 
			
		||||
.history/*
 | 
			
		||||
 | 
			
		||||
# misc
 | 
			
		||||
/.sass-cache
 | 
			
		||||
/connect.lock
 | 
			
		||||
/coverage
 | 
			
		||||
/libpeerconnection.log
 | 
			
		||||
npm-debug.log
 | 
			
		||||
yarn-error.log
 | 
			
		||||
testem.log
 | 
			
		||||
/typings
 | 
			
		||||
 | 
			
		||||
# System Files
 | 
			
		||||
.DS_Store
 | 
			
		||||
Thumbs.db
 | 
			
		||||
@ -1,27 +0,0 @@
 | 
			
		||||
# MyPrayerJournal
 | 
			
		||||
 | 
			
		||||
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.1.7.
 | 
			
		||||
 | 
			
		||||
## Development server
 | 
			
		||||
 | 
			
		||||
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
 | 
			
		||||
 | 
			
		||||
## Code scaffolding
 | 
			
		||||
 | 
			
		||||
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
 | 
			
		||||
 | 
			
		||||
## Build
 | 
			
		||||
 | 
			
		||||
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build.
 | 
			
		||||
 | 
			
		||||
## Running unit tests
 | 
			
		||||
 | 
			
		||||
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
 | 
			
		||||
 | 
			
		||||
## Running end-to-end tests
 | 
			
		||||
 | 
			
		||||
Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/).
 | 
			
		||||
 | 
			
		||||
## Further help
 | 
			
		||||
 | 
			
		||||
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).
 | 
			
		||||
@ -1,133 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
 | 
			
		||||
  "version": 1,
 | 
			
		||||
  "newProjectRoot": "projects",
 | 
			
		||||
  "projects": {
 | 
			
		||||
    "my-prayer-journal": {
 | 
			
		||||
      "projectType": "application",
 | 
			
		||||
      "schematics": {
 | 
			
		||||
        "@schematics/angular:component": {
 | 
			
		||||
          "style": "sass"
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "root": "",
 | 
			
		||||
      "sourceRoot": "src",
 | 
			
		||||
      "prefix": "app",
 | 
			
		||||
      "architect": {
 | 
			
		||||
        "build": {
 | 
			
		||||
          "builder": "@angular-devkit/build-angular:browser",
 | 
			
		||||
          "options": {
 | 
			
		||||
            "outputPath": "dist/my-prayer-journal",
 | 
			
		||||
            "index": "src/index.html",
 | 
			
		||||
            "main": "src/main.ts",
 | 
			
		||||
            "polyfills": "src/polyfills.ts",
 | 
			
		||||
            "tsConfig": "tsconfig.app.json",
 | 
			
		||||
            "aot": true,
 | 
			
		||||
            "assets": [
 | 
			
		||||
              "src/favicon.ico",
 | 
			
		||||
              "src/assets"
 | 
			
		||||
            ],
 | 
			
		||||
            "styles": [
 | 
			
		||||
              "src/custom-theme.sass",
 | 
			
		||||
              "src/styles.sass"
 | 
			
		||||
            ],
 | 
			
		||||
            "scripts": []
 | 
			
		||||
          },
 | 
			
		||||
          "configurations": {
 | 
			
		||||
            "production": {
 | 
			
		||||
              "fileReplacements": [
 | 
			
		||||
                {
 | 
			
		||||
                  "replace": "src/environments/environment.ts",
 | 
			
		||||
                  "with": "src/environments/environment.prod.ts"
 | 
			
		||||
                }
 | 
			
		||||
              ],
 | 
			
		||||
              "optimization": true,
 | 
			
		||||
              "outputHashing": "all",
 | 
			
		||||
              "sourceMap": false,
 | 
			
		||||
              "extractCss": true,
 | 
			
		||||
              "namedChunks": false,
 | 
			
		||||
              "extractLicenses": true,
 | 
			
		||||
              "vendorChunk": false,
 | 
			
		||||
              "buildOptimizer": true,
 | 
			
		||||
              "budgets": [
 | 
			
		||||
                {
 | 
			
		||||
                  "type": "initial",
 | 
			
		||||
                  "maximumWarning": "2mb",
 | 
			
		||||
                  "maximumError": "5mb"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "type": "anyComponentStyle",
 | 
			
		||||
                  "maximumWarning": "6kb",
 | 
			
		||||
                  "maximumError": "10kb"
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "serve": {
 | 
			
		||||
          "builder": "@angular-devkit/build-angular:dev-server",
 | 
			
		||||
          "options": {
 | 
			
		||||
            "browserTarget": "my-prayer-journal:build"
 | 
			
		||||
          },
 | 
			
		||||
          "configurations": {
 | 
			
		||||
            "production": {
 | 
			
		||||
              "browserTarget": "my-prayer-journal:build:production"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "extract-i18n": {
 | 
			
		||||
          "builder": "@angular-devkit/build-angular:extract-i18n",
 | 
			
		||||
          "options": {
 | 
			
		||||
            "browserTarget": "my-prayer-journal:build"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "test": {
 | 
			
		||||
          "builder": "@angular-devkit/build-angular:karma",
 | 
			
		||||
          "options": {
 | 
			
		||||
            "main": "src/test.ts",
 | 
			
		||||
            "polyfills": "src/polyfills.ts",
 | 
			
		||||
            "tsConfig": "tsconfig.spec.json",
 | 
			
		||||
            "karmaConfig": "karma.conf.js",
 | 
			
		||||
            "assets": [
 | 
			
		||||
              "src/favicon.ico",
 | 
			
		||||
              "src/assets"
 | 
			
		||||
            ],
 | 
			
		||||
            "styles": [
 | 
			
		||||
              "src/styles.sass"
 | 
			
		||||
            ],
 | 
			
		||||
            "scripts": []
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "lint": {
 | 
			
		||||
          "builder": "@angular-devkit/build-angular:tslint",
 | 
			
		||||
          "options": {
 | 
			
		||||
            "tsConfig": [
 | 
			
		||||
              "tsconfig.app.json",
 | 
			
		||||
              "tsconfig.spec.json",
 | 
			
		||||
              "e2e/tsconfig.json"
 | 
			
		||||
            ],
 | 
			
		||||
            "exclude": [
 | 
			
		||||
              "**/node_modules/**"
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "e2e": {
 | 
			
		||||
          "builder": "@angular-devkit/build-angular:protractor",
 | 
			
		||||
          "options": {
 | 
			
		||||
            "protractorConfig": "e2e/protractor.conf.js",
 | 
			
		||||
            "devServerTarget": "my-prayer-journal:serve"
 | 
			
		||||
          },
 | 
			
		||||
          "configurations": {
 | 
			
		||||
            "production": {
 | 
			
		||||
              "devServerTarget": "my-prayer-journal:serve:production"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "defaultProject": "my-prayer-journal",
 | 
			
		||||
  "cli": {
 | 
			
		||||
    "analytics": "93a75541-6896-443b-a420-2da53b39e3b8"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -1,12 +0,0 @@
 | 
			
		||||
# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
 | 
			
		||||
# For additional information regarding the format and rule options, please see:
 | 
			
		||||
# https://github.com/browserslist/browserslist#queries
 | 
			
		||||
 | 
			
		||||
# You can see what browsers were selected by your queries by running:
 | 
			
		||||
#   npx browserslist
 | 
			
		||||
 | 
			
		||||
> 0.5%
 | 
			
		||||
last 2 versions
 | 
			
		||||
Firefox ESR
 | 
			
		||||
not dead
 | 
			
		||||
not IE 9-11 # For IE 9-11 support, remove 'not'.
 | 
			
		||||
@ -1,32 +0,0 @@
 | 
			
		||||
// @ts-check
 | 
			
		||||
// Protractor configuration file, see link for more information
 | 
			
		||||
// https://github.com/angular/protractor/blob/master/lib/config.ts
 | 
			
		||||
 | 
			
		||||
const { SpecReporter } = require('jasmine-spec-reporter');
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @type { import("protractor").Config }
 | 
			
		||||
 */
 | 
			
		||||
exports.config = {
 | 
			
		||||
  allScriptsTimeout: 11000,
 | 
			
		||||
  specs: [
 | 
			
		||||
    './src/**/*.e2e-spec.ts'
 | 
			
		||||
  ],
 | 
			
		||||
  capabilities: {
 | 
			
		||||
    browserName: 'chrome'
 | 
			
		||||
  },
 | 
			
		||||
  directConnect: true,
 | 
			
		||||
  baseUrl: 'http://localhost:4200/',
 | 
			
		||||
  framework: 'jasmine',
 | 
			
		||||
  jasmineNodeOpts: {
 | 
			
		||||
    showColors: true,
 | 
			
		||||
    defaultTimeoutInterval: 30000,
 | 
			
		||||
    print: function() {}
 | 
			
		||||
  },
 | 
			
		||||
  onPrepare() {
 | 
			
		||||
    require('ts-node').register({
 | 
			
		||||
      project: require('path').join(__dirname, './tsconfig.json')
 | 
			
		||||
    });
 | 
			
		||||
    jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
@ -1,23 +0,0 @@
 | 
			
		||||
import { AppPage } from './app.po';
 | 
			
		||||
import { browser, logging } from 'protractor';
 | 
			
		||||
 | 
			
		||||
describe('workspace-project App', () => {
 | 
			
		||||
  let page: AppPage;
 | 
			
		||||
 | 
			
		||||
  beforeEach(() => {
 | 
			
		||||
    page = new AppPage();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should display welcome message', () => {
 | 
			
		||||
    page.navigateTo();
 | 
			
		||||
    expect(page.getTitleText()).toEqual('my-prayer-journal app is running!');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  afterEach(async () => {
 | 
			
		||||
    // Assert that there are no errors emitted from the browser
 | 
			
		||||
    const logs = await browser.manage().logs().get(logging.Type.BROWSER);
 | 
			
		||||
    expect(logs).not.toContain(jasmine.objectContaining({
 | 
			
		||||
      level: logging.Level.SEVERE,
 | 
			
		||||
    } as logging.Entry));
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
@ -1,11 +0,0 @@
 | 
			
		||||
import { browser, by, element } from 'protractor';
 | 
			
		||||
 | 
			
		||||
export class AppPage {
 | 
			
		||||
  navigateTo(): Promise<unknown> {
 | 
			
		||||
    return browser.get(browser.baseUrl) as Promise<unknown>;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getTitleText(): Promise<string> {
 | 
			
		||||
    return element(by.css('app-root .content span')).getText() as Promise<string>;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -1,13 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "extends": "../tsconfig.json",
 | 
			
		||||
  "compilerOptions": {
 | 
			
		||||
    "outDir": "../out-tsc/e2e",
 | 
			
		||||
    "module": "commonjs",
 | 
			
		||||
    "target": "es5",
 | 
			
		||||
    "types": [
 | 
			
		||||
      "jasmine",
 | 
			
		||||
      "jasminewd2",
 | 
			
		||||
      "node"
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -1,32 +0,0 @@
 | 
			
		||||
// Karma configuration file, see link for more information
 | 
			
		||||
// https://karma-runner.github.io/1.0/config/configuration-file.html
 | 
			
		||||
 | 
			
		||||
module.exports = function (config) {
 | 
			
		||||
  config.set({
 | 
			
		||||
    basePath: '',
 | 
			
		||||
    frameworks: ['jasmine', '@angular-devkit/build-angular'],
 | 
			
		||||
    plugins: [
 | 
			
		||||
      require('karma-jasmine'),
 | 
			
		||||
      require('karma-chrome-launcher'),
 | 
			
		||||
      require('karma-jasmine-html-reporter'),
 | 
			
		||||
      require('karma-coverage-istanbul-reporter'),
 | 
			
		||||
      require('@angular-devkit/build-angular/plugins/karma')
 | 
			
		||||
    ],
 | 
			
		||||
    client: {
 | 
			
		||||
      clearContext: false // leave Jasmine Spec Runner output visible in browser
 | 
			
		||||
    },
 | 
			
		||||
    coverageIstanbulReporter: {
 | 
			
		||||
      dir: require('path').join(__dirname, './coverage/my-prayer-journal'),
 | 
			
		||||
      reports: ['html', 'lcovonly', 'text-summary'],
 | 
			
		||||
      fixWebpackSourcePaths: true
 | 
			
		||||
    },
 | 
			
		||||
    reporters: ['progress', 'kjhtml'],
 | 
			
		||||
    port: 9876,
 | 
			
		||||
    colors: true,
 | 
			
		||||
    logLevel: config.LOG_INFO,
 | 
			
		||||
    autoWatch: true,
 | 
			
		||||
    browsers: ['Chrome'],
 | 
			
		||||
    singleRun: false,
 | 
			
		||||
    restartOnFileChange: true
 | 
			
		||||
  });
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										13351
									
								
								src/my-prayer-journal/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										13351
									
								
								src/my-prayer-journal/package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,49 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "my-prayer-journal",
 | 
			
		||||
  "version": "3.0.0",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "ng": "ng",
 | 
			
		||||
    "start": "ng serve",
 | 
			
		||||
    "build": "ng build",
 | 
			
		||||
    "test": "ng test",
 | 
			
		||||
    "lint": "ng lint",
 | 
			
		||||
    "e2e": "ng e2e"
 | 
			
		||||
  },
 | 
			
		||||
  "private": true,
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@angular/animations": "~9.1.9",
 | 
			
		||||
    "@angular/cdk": "^9.2.4",
 | 
			
		||||
    "@angular/common": "~9.1.9",
 | 
			
		||||
    "@angular/compiler": "~9.1.9",
 | 
			
		||||
    "@angular/core": "~9.1.9",
 | 
			
		||||
    "@angular/forms": "~9.1.9",
 | 
			
		||||
    "@angular/material": "^9.2.4",
 | 
			
		||||
    "@angular/platform-browser": "~9.1.9",
 | 
			
		||||
    "@angular/platform-browser-dynamic": "~9.1.9",
 | 
			
		||||
    "@angular/router": "~9.1.9",
 | 
			
		||||
    "@auth0/auth0-spa-js": "^1.9.0",
 | 
			
		||||
    "rxjs": "~6.5.4",
 | 
			
		||||
    "tslib": "^1.10.0",
 | 
			
		||||
    "zone.js": "~0.10.2"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@angular-devkit/build-angular": "~0.901.7",
 | 
			
		||||
    "@angular/cli": "~9.1.7",
 | 
			
		||||
    "@angular/compiler-cli": "~9.1.9",
 | 
			
		||||
    "@types/node": "^12.11.1",
 | 
			
		||||
    "@types/jasmine": "~3.5.0",
 | 
			
		||||
    "@types/jasminewd2": "~2.0.3",
 | 
			
		||||
    "codelyzer": "^5.1.2",
 | 
			
		||||
    "jasmine-core": "~3.5.0",
 | 
			
		||||
    "jasmine-spec-reporter": "~4.2.1",
 | 
			
		||||
    "karma": "~5.0.0",
 | 
			
		||||
    "karma-chrome-launcher": "~3.1.0",
 | 
			
		||||
    "karma-coverage-istanbul-reporter": "~2.1.0",
 | 
			
		||||
    "karma-jasmine": "~3.0.1",
 | 
			
		||||
    "karma-jasmine-html-reporter": "^1.4.2",
 | 
			
		||||
    "protractor": "~7.0.0",
 | 
			
		||||
    "ts-node": "~8.3.0",
 | 
			
		||||
    "tslint": "~6.1.0",
 | 
			
		||||
    "typescript": "~3.8.3"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -1,13 +0,0 @@
 | 
			
		||||
import { NgModule } from '@angular/core';
 | 
			
		||||
import { Routes, RouterModule } from '@angular/router'
 | 
			
		||||
import { HomeComponent } from './pages/home/home.component'
 | 
			
		||||
 | 
			
		||||
const routes: Routes = [
 | 
			
		||||
  { path: '', component: HomeComponent }
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
@NgModule({
 | 
			
		||||
  imports: [RouterModule.forRoot(routes)],
 | 
			
		||||
  exports: [RouterModule]
 | 
			
		||||
})
 | 
			
		||||
export class AppRoutingModule { }
 | 
			
		||||
@ -1,2 +0,0 @@
 | 
			
		||||
<app-top-header></app-top-header>
 | 
			
		||||
<router-outlet></router-outlet>
 | 
			
		||||
@ -1,35 +0,0 @@
 | 
			
		||||
import { TestBed, async } from '@angular/core/testing';
 | 
			
		||||
import { RouterTestingModule } from '@angular/router/testing';
 | 
			
		||||
import { AppComponent } from './app.component';
 | 
			
		||||
 | 
			
		||||
describe('AppComponent', () => {
 | 
			
		||||
  beforeEach(async(() => {
 | 
			
		||||
    TestBed.configureTestingModule({
 | 
			
		||||
      imports: [
 | 
			
		||||
        RouterTestingModule
 | 
			
		||||
      ],
 | 
			
		||||
      declarations: [
 | 
			
		||||
        AppComponent
 | 
			
		||||
      ],
 | 
			
		||||
    }).compileComponents();
 | 
			
		||||
  }));
 | 
			
		||||
 | 
			
		||||
  it('should create the app', () => {
 | 
			
		||||
    const fixture = TestBed.createComponent(AppComponent);
 | 
			
		||||
    const app = fixture.componentInstance;
 | 
			
		||||
    expect(app).toBeTruthy();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it(`should have as title 'my-prayer-journal'`, () => {
 | 
			
		||||
    const fixture = TestBed.createComponent(AppComponent);
 | 
			
		||||
    const app = fixture.componentInstance;
 | 
			
		||||
    expect(app.title).toEqual('my-prayer-journal');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render title', () => {
 | 
			
		||||
    const fixture = TestBed.createComponent(AppComponent);
 | 
			
		||||
    fixture.detectChanges();
 | 
			
		||||
    const compiled = fixture.nativeElement;
 | 
			
		||||
    expect(compiled.querySelector('.content span').textContent).toContain('my-prayer-journal app is running!');
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
@ -1,10 +0,0 @@
 | 
			
		||||
import { Component } from '@angular/core'
 | 
			
		||||
 | 
			
		||||
@Component({
 | 
			
		||||
  selector: 'app-root',
 | 
			
		||||
  templateUrl: './app.component.html',
 | 
			
		||||
  styleUrls: ['./app.component.sass']
 | 
			
		||||
})
 | 
			
		||||
export class AppComponent {
 | 
			
		||||
  title = 'my-prayer-journal'
 | 
			
		||||
}
 | 
			
		||||
@ -1,24 +0,0 @@
 | 
			
		||||
import { NgModule } from '@angular/core'
 | 
			
		||||
import { BrowserModule } from '@angular/platform-browser'
 | 
			
		||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations'
 | 
			
		||||
 | 
			
		||||
import { AppRoutingModule } from './app-routing.module'
 | 
			
		||||
import { AppComponent } from './app.component'
 | 
			
		||||
import { SharedModule } from './shared/shared.module'
 | 
			
		||||
import { HomeComponent } from './pages/home/home.component'
 | 
			
		||||
 | 
			
		||||
@NgModule({
 | 
			
		||||
  declarations: [
 | 
			
		||||
    AppComponent,
 | 
			
		||||
    HomeComponent
 | 
			
		||||
  ],
 | 
			
		||||
  imports: [
 | 
			
		||||
    BrowserModule,
 | 
			
		||||
    AppRoutingModule,
 | 
			
		||||
    BrowserAnimationsModule,
 | 
			
		||||
    SharedModule
 | 
			
		||||
  ],
 | 
			
		||||
  providers: [],
 | 
			
		||||
  bootstrap: [AppComponent]
 | 
			
		||||
})
 | 
			
		||||
export class AppModule { }
 | 
			
		||||
@ -1,16 +0,0 @@
 | 
			
		||||
import { TestBed } from '@angular/core/testing'
 | 
			
		||||
 | 
			
		||||
import { AuthService } from './auth.service'
 | 
			
		||||
 | 
			
		||||
describe('AuthService', () => {
 | 
			
		||||
  let service: AuthService
 | 
			
		||||
 | 
			
		||||
  beforeEach(() => {
 | 
			
		||||
    TestBed.configureTestingModule({})
 | 
			
		||||
    service = TestBed.inject(AuthService)
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  it('should be created', () => {
 | 
			
		||||
    expect(service).toBeTruthy()
 | 
			
		||||
  })
 | 
			
		||||
})
 | 
			
		||||
@ -1,126 +0,0 @@
 | 
			
		||||
import { Injectable } from '@angular/core'
 | 
			
		||||
import { Router } from '@angular/router'
 | 
			
		||||
import createAuth0Client, { GetUserOptions } from '@auth0/auth0-spa-js'
 | 
			
		||||
import Auth0Client from '@auth0/auth0-spa-js/dist/typings/Auth0Client'
 | 
			
		||||
import { BehaviorSubject, combineLatest, from, Observable, of, throwError } from 'rxjs'
 | 
			
		||||
import { catchError, concatMap, shareReplay, tap } from 'rxjs/operators'
 | 
			
		||||
 | 
			
		||||
@Injectable({
 | 
			
		||||
  providedIn: 'root'
 | 
			
		||||
})
 | 
			
		||||
export class AuthService {
 | 
			
		||||
  // Create an observable of Auth0 instance of client
 | 
			
		||||
  auth0Client$ = (from(
 | 
			
		||||
    createAuth0Client({
 | 
			
		||||
      domain: "djs-consulting.auth0.com",
 | 
			
		||||
      client_id: "Of2s0RQCQ3mt3dwIkOBY5h85J9sXbF2n",
 | 
			
		||||
      redirect_uri: `${window.location.origin}`
 | 
			
		||||
    })
 | 
			
		||||
  ) as Observable<Auth0Client>).pipe(
 | 
			
		||||
    shareReplay(1), // Every subscription receives the same shared value
 | 
			
		||||
    catchError(err => throwError(err))
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  // Define observables for SDK methods that return promises by default
 | 
			
		||||
  // For each Auth0 SDK method, first ensure the client instance is ready
 | 
			
		||||
  // concatMap: Using the client instance, call SDK method; SDK returns a promise
 | 
			
		||||
  // from: Convert that resulting promise into an observable
 | 
			
		||||
  isAuthenticated$ = this.auth0Client$.pipe(
 | 
			
		||||
    concatMap((client: Auth0Client) => from(client.isAuthenticated())),
 | 
			
		||||
    tap(res => this.loggedIn = res)
 | 
			
		||||
  )
 | 
			
		||||
  handleRedirectCallback$ = this.auth0Client$.pipe(
 | 
			
		||||
    concatMap((client: Auth0Client) => from(client.handleRedirectCallback()))
 | 
			
		||||
  )
 | 
			
		||||
  // Create subject and public observable of user profile data
 | 
			
		||||
  private userProfileSubject$ = new BehaviorSubject<any>(null)
 | 
			
		||||
  userProfile$ = this.userProfileSubject$.asObservable()
 | 
			
		||||
  // Create a local property for login status
 | 
			
		||||
  loggedIn = false
 | 
			
		||||
 | 
			
		||||
  constructor(private router: Router) {
 | 
			
		||||
    // On initial load, check authentication state with authorization server
 | 
			
		||||
    // Set up local auth streams if user is already authenticated
 | 
			
		||||
    this.localAuthSetup()
 | 
			
		||||
    // Handle redirect from Auth0 login
 | 
			
		||||
    this.handleAuthCallback()
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // When calling, options can be passed if desired
 | 
			
		||||
  // https://auth0.github.io/auth0-spa-js/classes/auth0client.html#getuser
 | 
			
		||||
  getUser$(options?: GetUserOptions): Observable<any> {
 | 
			
		||||
    return this.auth0Client$.pipe(
 | 
			
		||||
      concatMap((client: Auth0Client) => from(client.getUser(options))),
 | 
			
		||||
      tap(user => this.userProfileSubject$.next(user))
 | 
			
		||||
    )
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private localAuthSetup() {
 | 
			
		||||
    // This should only be called on app initialization
 | 
			
		||||
    // Set up local authentication streams
 | 
			
		||||
    const checkAuth$ = this.isAuthenticated$.pipe(
 | 
			
		||||
      concatMap((loggedIn: boolean) => {
 | 
			
		||||
        if (loggedIn) {
 | 
			
		||||
          // If authenticated, get user and set in app
 | 
			
		||||
          // NOTE: you could pass options here if needed
 | 
			
		||||
          return this.getUser$()
 | 
			
		||||
        }
 | 
			
		||||
        // If not authenticated, return stream that emits 'false'
 | 
			
		||||
        return of(loggedIn)
 | 
			
		||||
      })
 | 
			
		||||
    )
 | 
			
		||||
    checkAuth$.subscribe()
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  login(redirectPath: string = '/') {
 | 
			
		||||
    // A desired redirect path can be passed to login method
 | 
			
		||||
    // (e.g., from a route guard)
 | 
			
		||||
    // Ensure Auth0 client instance exists
 | 
			
		||||
    this.auth0Client$.subscribe((client: Auth0Client) => {
 | 
			
		||||
      // Call method to log in
 | 
			
		||||
      client.loginWithRedirect({
 | 
			
		||||
        redirect_uri: `${window.location.origin}`,
 | 
			
		||||
        appState: { target: redirectPath }
 | 
			
		||||
      })
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private handleAuthCallback() {
 | 
			
		||||
    // Call when app reloads after user logs in with Auth0
 | 
			
		||||
    const params = window.location.search
 | 
			
		||||
    if (params.includes('code=') && params.includes('state=')) {
 | 
			
		||||
      let targetRoute: string // Path to redirect to after login processsed
 | 
			
		||||
      const authComplete$ = this.handleRedirectCallback$.pipe(
 | 
			
		||||
        // Have client, now call method to handle auth callback redirect
 | 
			
		||||
        tap(cbRes => {
 | 
			
		||||
          // Get and set target redirect route from callback results
 | 
			
		||||
          targetRoute = cbRes.appState && cbRes.appState.target ? cbRes.appState.target : '/';
 | 
			
		||||
        }),
 | 
			
		||||
        concatMap(() => {
 | 
			
		||||
          // Redirect callback complete; get user and login status
 | 
			
		||||
          return combineLatest([
 | 
			
		||||
            this.getUser$(),
 | 
			
		||||
            this.isAuthenticated$
 | 
			
		||||
          ])
 | 
			
		||||
        })
 | 
			
		||||
      )
 | 
			
		||||
      // Subscribe to authentication completion observable
 | 
			
		||||
      // Response will be an array of user and login status
 | 
			
		||||
      authComplete$.subscribe(([user, loggedIn]) => {
 | 
			
		||||
        // Redirect to target route after callback processing
 | 
			
		||||
        this.router.navigate([targetRoute])
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  logout() {
 | 
			
		||||
    // Ensure Auth0 client instance exists
 | 
			
		||||
    this.auth0Client$.subscribe((client: Auth0Client) => {
 | 
			
		||||
      // Call method to log out
 | 
			
		||||
      client.logout({
 | 
			
		||||
        client_id: "Of2s0RQCQ3mt3dwIkOBY5h85J9sXbF2n",
 | 
			
		||||
        returnTo: `${window.location.origin}`
 | 
			
		||||
      })
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -1,13 +0,0 @@
 | 
			
		||||
<main role="main" class="mpj-main-content">
 | 
			
		||||
  <p> </p>
 | 
			
		||||
  <p>
 | 
			
		||||
    myPrayerJournal is a place where individuals can record their prayer requests, record that they prayed for them,
 | 
			
		||||
    update them as God moves in the situation, and record a final answer received on that request. It also allows
 | 
			
		||||
    individuals to review their answered prayers.
 | 
			
		||||
  </p>
 | 
			
		||||
  <p>
 | 
			
		||||
    This site is open and available to the general public. To get started, simply click the “Log On” link
 | 
			
		||||
    above, and log on with either a Microsoft or Google account. You can also learn more about the site at the
 | 
			
		||||
    “Docs” link, also above.
 | 
			
		||||
  </p>
 | 
			
		||||
</main>
 | 
			
		||||
@ -1,25 +0,0 @@
 | 
			
		||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'
 | 
			
		||||
 | 
			
		||||
import { HomeComponent } from './home.component'
 | 
			
		||||
 | 
			
		||||
describe('HomeComponent', () => {
 | 
			
		||||
  let component: HomeComponent
 | 
			
		||||
  let fixture: ComponentFixture<HomeComponent>
 | 
			
		||||
 | 
			
		||||
  beforeEach(async(() => {
 | 
			
		||||
    TestBed.configureTestingModule({
 | 
			
		||||
      declarations: [ HomeComponent ]
 | 
			
		||||
    })
 | 
			
		||||
    .compileComponents()
 | 
			
		||||
  }))
 | 
			
		||||
 | 
			
		||||
  beforeEach(() => {
 | 
			
		||||
    fixture = TestBed.createComponent(HomeComponent)
 | 
			
		||||
    component = fixture.componentInstance
 | 
			
		||||
    fixture.detectChanges()
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  it('should create', () => {
 | 
			
		||||
    expect(component).toBeTruthy()
 | 
			
		||||
  })
 | 
			
		||||
})
 | 
			
		||||
@ -1,15 +0,0 @@
 | 
			
		||||
import { Component } from '@angular/core'
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Home Page.
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Daniel J. Summers <daniel@bitbadger.solutions>
 | 
			
		||||
 * @version 3
 | 
			
		||||
 */
 | 
			
		||||
@Component({
 | 
			
		||||
  selector: 'app-home',
 | 
			
		||||
  templateUrl: './home.component.html'
 | 
			
		||||
})
 | 
			
		||||
export class HomeComponent {
 | 
			
		||||
  constructor() { }
 | 
			
		||||
}
 | 
			
		||||
@ -1,29 +0,0 @@
 | 
			
		||||
import { CommonModule } from '@angular/common'
 | 
			
		||||
import { NgModule } from '@angular/core'
 | 
			
		||||
import { MatToolbarModule } from '@angular/material/toolbar'
 | 
			
		||||
 | 
			
		||||
import { NavigationComponent } from './ui/navigation/navigation.component'
 | 
			
		||||
import { TopHeaderComponent } from './ui/top-header/top-header.component'
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * myPrayerJournal Shared Module.
 | 
			
		||||
 * 
 | 
			
		||||
 * This module contains UI components designed to be used throughout the application.
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Daniel J. Summers <daniel@bitbadger.solutions>
 | 
			
		||||
 * @version 3
 | 
			
		||||
 */
 | 
			
		||||
@NgModule({
 | 
			
		||||
  declarations: [
 | 
			
		||||
    NavigationComponent,
 | 
			
		||||
    TopHeaderComponent
 | 
			
		||||
  ],
 | 
			
		||||
  imports: [
 | 
			
		||||
    CommonModule,
 | 
			
		||||
    MatToolbarModule
 | 
			
		||||
  ],
 | 
			
		||||
  exports: [
 | 
			
		||||
    TopHeaderComponent
 | 
			
		||||
  ]
 | 
			
		||||
})
 | 
			
		||||
export class SharedModule { }
 | 
			
		||||
@ -1,9 +0,0 @@
 | 
			
		||||
<ng-container *ngIf="auth.loggedIn">
 | 
			
		||||
  <a routerLink="/journal">Journal</a>
 | 
			
		||||
  <a routerLink="/requests/active">Active</a>
 | 
			
		||||
  <a *ngIf="hasSnoozed" routerLink="/requests/snoozed">Snoozed</a>
 | 
			
		||||
  <a routerLink="/requests/answered">Answered</a>
 | 
			
		||||
  <a href="/user/log-off" (click)="logOff($event)">Log Off</a>
 | 
			
		||||
</ng-container>
 | 
			
		||||
<a *ngIf="!auth.loggedIn" href="/user/log-on" (click)="logOn($event)">Log On</a>
 | 
			
		||||
<a href="https://docs.prayerjournal.me" target="_blank">Docs</a>
 | 
			
		||||
@ -1,11 +0,0 @@
 | 
			
		||||
a,
 | 
			
		||||
a:link,
 | 
			
		||||
a:visited
 | 
			
		||||
  color: white
 | 
			
		||||
  font-size: .9rem
 | 
			
		||||
  text-transform: uppercase
 | 
			
		||||
  text-decoration: none
 | 
			
		||||
  padding: 0 1rem
 | 
			
		||||
 | 
			
		||||
a:hover
 | 
			
		||||
  border-bottom: solid 1px white
 | 
			
		||||
@ -1,25 +0,0 @@
 | 
			
		||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
 | 
			
		||||
 | 
			
		||||
import { NavigationComponent } from './navigation.component';
 | 
			
		||||
 | 
			
		||||
describe('NavigationComponent', () => {
 | 
			
		||||
  let component: NavigationComponent;
 | 
			
		||||
  let fixture: ComponentFixture<NavigationComponent>;
 | 
			
		||||
 | 
			
		||||
  beforeEach(async(() => {
 | 
			
		||||
    TestBed.configureTestingModule({
 | 
			
		||||
      declarations: [ NavigationComponent ]
 | 
			
		||||
    })
 | 
			
		||||
    .compileComponents();
 | 
			
		||||
  }));
 | 
			
		||||
 | 
			
		||||
  beforeEach(() => {
 | 
			
		||||
    fixture = TestBed.createComponent(NavigationComponent);
 | 
			
		||||
    component = fixture.componentInstance;
 | 
			
		||||
    fixture.detectChanges();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should create', () => {
 | 
			
		||||
    expect(component).toBeTruthy();
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
@ -1,41 +0,0 @@
 | 
			
		||||
import { Component } from '@angular/core'
 | 
			
		||||
import { AuthService } from 'src/app/auth.service'
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * myPrayerJournal Navigation.
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Daniel J. Summers <daniel@bitbadger.solutions>
 | 
			
		||||
 * @version 3
 | 
			
		||||
 */
 | 
			
		||||
@Component({
 | 
			
		||||
  selector: 'app-navigation',
 | 
			
		||||
  templateUrl: './navigation.component.html',
 | 
			
		||||
  styleUrls: ['./navigation.component.sass']
 | 
			
		||||
})
 | 
			
		||||
export class NavigationComponent {
 | 
			
		||||
 | 
			
		||||
  // TODO: get this from the store's state
 | 
			
		||||
  hasSnoozed = false
 | 
			
		||||
 | 
			
		||||
  constructor(public auth: AuthService) { }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Start the log on process.
 | 
			
		||||
   * 
 | 
			
		||||
   * @param e The click event (used to stop the default action)
 | 
			
		||||
   */
 | 
			
		||||
  logOn(e: Event) {
 | 
			
		||||
    e.preventDefault()
 | 
			
		||||
    this.auth.login()
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Log the user off.
 | 
			
		||||
   * 
 | 
			
		||||
   * @param e The click event (used to stop the default action)
 | 
			
		||||
   */
 | 
			
		||||
  logOff(e: Event) {
 | 
			
		||||
    e.preventDefault()
 | 
			
		||||
    this.auth.logout()
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -1,11 +0,0 @@
 | 
			
		||||
<mat-toolbar color="primary">
 | 
			
		||||
  <mat-toolbar-row>
 | 
			
		||||
    <span>
 | 
			
		||||
      <a routerLink="/">
 | 
			
		||||
        <span class="light">my</span><span class="normal">Prayer</span><span class="bold">Journal</span>
 | 
			
		||||
      </a>
 | 
			
		||||
    </span>
 | 
			
		||||
    <span class="spacer"></span>
 | 
			
		||||
    <app-navigation></app-navigation>
 | 
			
		||||
  </mat-toolbar-row>
 | 
			
		||||
</mat-toolbar>
 | 
			
		||||
@ -1,9 +0,0 @@
 | 
			
		||||
.light
 | 
			
		||||
  font-weight: 100
 | 
			
		||||
.normal
 | 
			
		||||
  font-weight: 400
 | 
			
		||||
.bold
 | 
			
		||||
  font-weight: 700
 | 
			
		||||
.spacer
 | 
			
		||||
  flex: 1 1 auto
 | 
			
		||||
  
 | 
			
		||||
@ -1,25 +0,0 @@
 | 
			
		||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
 | 
			
		||||
 | 
			
		||||
import { TopHeaderComponent } from './top-header.component';
 | 
			
		||||
 | 
			
		||||
describe('TopHeaderComponent', () => {
 | 
			
		||||
  let component: TopHeaderComponent;
 | 
			
		||||
  let fixture: ComponentFixture<TopHeaderComponent>;
 | 
			
		||||
 | 
			
		||||
  beforeEach(async(() => {
 | 
			
		||||
    TestBed.configureTestingModule({
 | 
			
		||||
      declarations: [ TopHeaderComponent ]
 | 
			
		||||
    })
 | 
			
		||||
    .compileComponents();
 | 
			
		||||
  }));
 | 
			
		||||
 | 
			
		||||
  beforeEach(() => {
 | 
			
		||||
    fixture = TestBed.createComponent(TopHeaderComponent);
 | 
			
		||||
    component = fixture.componentInstance;
 | 
			
		||||
    fixture.detectChanges();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should create', () => {
 | 
			
		||||
    expect(component).toBeTruthy();
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
@ -1,21 +0,0 @@
 | 
			
		||||
import { Component, OnInit } from '@angular/core'
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * myPrayerJournal Top Header.
 | 
			
		||||
 * 
 | 
			
		||||
 * @author Daniel J. Summers <daniel@bitbadger.solutions>
 | 
			
		||||
 * @version 3
 | 
			
		||||
 */
 | 
			
		||||
@Component({
 | 
			
		||||
  selector: 'app-top-header',
 | 
			
		||||
  templateUrl: './top-header.component.html',
 | 
			
		||||
  styleUrls: ['./top-header.component.sass']
 | 
			
		||||
})
 | 
			
		||||
export class TopHeaderComponent implements OnInit {
 | 
			
		||||
 | 
			
		||||
  constructor() { }
 | 
			
		||||
 | 
			
		||||
  ngOnInit(): void {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -1,32 +0,0 @@
 | 
			
		||||
// Custom Theming for Angular Material
 | 
			
		||||
// For more information: https://material.angular.io/guide/theming
 | 
			
		||||
@import '~@angular/material/theming'
 | 
			
		||||
// Plus imports for other components in your app.
 | 
			
		||||
 | 
			
		||||
// Include the common styles for Angular Material. We include this here so that you only
 | 
			
		||||
// have to load a single css file for Angular Material in your app.
 | 
			
		||||
// Be sure that you only ever include this mixin once!
 | 
			
		||||
@include mat-core()
 | 
			
		||||
 | 
			
		||||
// Define the palettes for your theme using the Material Design palettes available in palette.scss
 | 
			
		||||
// (imported above). For each palette, you can optionally specify a default, lighter, and darker
 | 
			
		||||
// hue. Available color palettes: https://material.io/design/color/
 | 
			
		||||
$my-prayer-journal-primary: mat-palette($mat-green, 800, 400, 900)
 | 
			
		||||
$my-prayer-journal-accent: mat-palette($mat-pink, A200, A100, A400)
 | 
			
		||||
 | 
			
		||||
// The warn palette is optional (defaults to red).
 | 
			
		||||
$my-prayer-journal-warn: mat-palette($mat-red)
 | 
			
		||||
 | 
			
		||||
// Create the theme object (a Sass map containing all of the palettes).
 | 
			
		||||
$my-prayer-journal-theme: mat-light-theme($my-prayer-journal-primary, $my-prayer-journal-accent, $my-prayer-journal-warn)
 | 
			
		||||
 | 
			
		||||
// Include theme styles for core and each component used in your app.
 | 
			
		||||
// Alternatively, you can import and @include the theme mixins for each component
 | 
			
		||||
// that you are using.
 | 
			
		||||
@include angular-material-theme($my-prayer-journal-theme)
 | 
			
		||||
 | 
			
		||||
html, body
 | 
			
		||||
  height: 100%
 | 
			
		||||
body
 | 
			
		||||
  margin: 0
 | 
			
		||||
  font-family: Roboto, "Helvetica Neue", sans-serif
 | 
			
		||||
@ -1,3 +0,0 @@
 | 
			
		||||
export const environment = {
 | 
			
		||||
  production: true
 | 
			
		||||
};
 | 
			
		||||
@ -1,16 +0,0 @@
 | 
			
		||||
// 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.
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@ -1,15 +0,0 @@
 | 
			
		||||
<!doctype html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
  <meta charset="utf-8">
 | 
			
		||||
  <title>myPrayerJournal</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:100,300,400,500,700&display=swap" rel="stylesheet">
 | 
			
		||||
  <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
 | 
			
		||||
</head>
 | 
			
		||||
<body class="mat-typography">
 | 
			
		||||
  <app-root></app-root>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
@ -1,12 +0,0 @@
 | 
			
		||||
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));
 | 
			
		||||
@ -1,63 +0,0 @@
 | 
			
		||||
/**
 | 
			
		||||
 * 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';
 | 
			
		||||
 *
 | 
			
		||||
 * 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
 | 
			
		||||
 */
 | 
			
		||||
@ -1,37 +0,0 @@
 | 
			
		||||
p
 | 
			
		||||
  margin-bottom: 0
 | 
			
		||||
footer
 | 
			
		||||
  border-top: solid 1px lightgray
 | 
			
		||||
  margin: 1rem -1rem 0
 | 
			
		||||
  padding: 0 1rem
 | 
			
		||||
footer p
 | 
			
		||||
  margin: 0
 | 
			
		||||
.mpj-full-page-card
 | 
			
		||||
  font-size: 1rem
 | 
			
		||||
  line-height: 1.25rem
 | 
			
		||||
.mpj-main-content
 | 
			
		||||
  max-width: 61rem
 | 
			
		||||
  padding: 0 .5rem
 | 
			
		||||
  margin: auto
 | 
			
		||||
.mpj-request-text
 | 
			
		||||
  white-space: pre-line
 | 
			
		||||
p.mpj-request-text
 | 
			
		||||
  margin-top: 0
 | 
			
		||||
.mpj-text-center
 | 
			
		||||
  text-align: center
 | 
			
		||||
.mpj-text-nowrap
 | 
			
		||||
  white-space: nowrap
 | 
			
		||||
.mpj-text-right
 | 
			
		||||
  text-align: right
 | 
			
		||||
.mpj-muted-text
 | 
			
		||||
  color: rgba(0, 0, 0, .6)
 | 
			
		||||
.mpj-valign-top
 | 
			
		||||
  vertical-align: top
 | 
			
		||||
.mpj-narrow
 | 
			
		||||
  max-width: 40rem
 | 
			
		||||
  margin: auto
 | 
			
		||||
.mpj-skinny
 | 
			
		||||
  max-width: 20rem
 | 
			
		||||
  margin: auto
 | 
			
		||||
.mpj-full-width
 | 
			
		||||
  width: 100%
 | 
			
		||||
@ -1,25 +0,0 @@
 | 
			
		||||
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
 | 
			
		||||
 | 
			
		||||
import 'zone.js/dist/zone-testing';
 | 
			
		||||
import { getTestBed } from '@angular/core/testing';
 | 
			
		||||
import {
 | 
			
		||||
  BrowserDynamicTestingModule,
 | 
			
		||||
  platformBrowserDynamicTesting
 | 
			
		||||
} from '@angular/platform-browser-dynamic/testing';
 | 
			
		||||
 | 
			
		||||
declare const require: {
 | 
			
		||||
  context(path: string, deep?: boolean, filter?: RegExp): {
 | 
			
		||||
    keys(): string[];
 | 
			
		||||
    <T>(id: string): T;
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// First, initialize the Angular testing environment.
 | 
			
		||||
getTestBed().initTestEnvironment(
 | 
			
		||||
  BrowserDynamicTestingModule,
 | 
			
		||||
  platformBrowserDynamicTesting()
 | 
			
		||||
);
 | 
			
		||||
// Then we find all the tests.
 | 
			
		||||
const context = require.context('./', true, /\.spec\.ts$/);
 | 
			
		||||
// And load the modules.
 | 
			
		||||
context.keys().map(context);
 | 
			
		||||
@ -1,14 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "extends": "./tsconfig.json",
 | 
			
		||||
  "compilerOptions": {
 | 
			
		||||
    "outDir": "./out-tsc/app",
 | 
			
		||||
    "types": []
 | 
			
		||||
  },
 | 
			
		||||
  "files": [
 | 
			
		||||
    "src/main.ts",
 | 
			
		||||
    "src/polyfills.ts"
 | 
			
		||||
  ],
 | 
			
		||||
  "include": [
 | 
			
		||||
    "src/**/*.d.ts"
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@ -1,28 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "compileOnSave": false,
 | 
			
		||||
  "compilerOptions": {
 | 
			
		||||
    "baseUrl": "./",
 | 
			
		||||
    "outDir": "./dist/out-tsc",
 | 
			
		||||
    "noImplicitAny": true,
 | 
			
		||||
    "noImplicitReturns": true,
 | 
			
		||||
    "noImplicitThis": true,
 | 
			
		||||
    "noFallthroughCasesInSwitch": true,
 | 
			
		||||
    "strictNullChecks": true,
 | 
			
		||||
    "sourceMap": true,
 | 
			
		||||
    "declaration": false,
 | 
			
		||||
    "downlevelIteration": true,
 | 
			
		||||
    "experimentalDecorators": true,
 | 
			
		||||
    "module": "esnext",
 | 
			
		||||
    "moduleResolution": "node",
 | 
			
		||||
    "importHelpers": true,
 | 
			
		||||
    "target": "es2015",
 | 
			
		||||
    "lib": [
 | 
			
		||||
      "es2018",
 | 
			
		||||
      "dom"
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "angularCompilerOptions": {
 | 
			
		||||
    "fullTemplateTypeCheck": true,
 | 
			
		||||
    "strictInjectionParameters": true
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -1,18 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "extends": "./tsconfig.json",
 | 
			
		||||
  "compilerOptions": {
 | 
			
		||||
    "outDir": "./out-tsc/spec",
 | 
			
		||||
    "types": [
 | 
			
		||||
      "jasmine",
 | 
			
		||||
      "node"
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "files": [
 | 
			
		||||
    "src/test.ts",
 | 
			
		||||
    "src/polyfills.ts"
 | 
			
		||||
  ],
 | 
			
		||||
  "include": [
 | 
			
		||||
    "src/**/*.spec.ts",
 | 
			
		||||
    "src/**/*.d.ts"
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@ -1,148 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "extends": "tslint:recommended",
 | 
			
		||||
  "rules": {
 | 
			
		||||
    "align": {
 | 
			
		||||
      "options": [
 | 
			
		||||
        "parameters",
 | 
			
		||||
        "statements"
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "array-type": false,
 | 
			
		||||
    "arrow-return-shorthand": true,
 | 
			
		||||
    "curly": true,
 | 
			
		||||
    "deprecation": {
 | 
			
		||||
      "severity": "warning"
 | 
			
		||||
    },
 | 
			
		||||
    "component-class-suffix": true,
 | 
			
		||||
    "contextual-lifecycle": true,
 | 
			
		||||
    "directive-class-suffix": true,
 | 
			
		||||
    "directive-selector": [
 | 
			
		||||
      true,
 | 
			
		||||
      "attribute",
 | 
			
		||||
      "app",
 | 
			
		||||
      "camelCase"
 | 
			
		||||
    ],
 | 
			
		||||
    "component-selector": [
 | 
			
		||||
      true,
 | 
			
		||||
      "element",
 | 
			
		||||
      "app",
 | 
			
		||||
      "kebab-case"
 | 
			
		||||
    ],
 | 
			
		||||
    "eofline": true,
 | 
			
		||||
    "import-blacklist": [
 | 
			
		||||
      true,
 | 
			
		||||
      "rxjs/Rx"
 | 
			
		||||
    ],
 | 
			
		||||
    "import-spacing": true,
 | 
			
		||||
    "indent": {
 | 
			
		||||
      "options": [
 | 
			
		||||
        "spaces"
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "max-classes-per-file": false,
 | 
			
		||||
    "max-line-length": [
 | 
			
		||||
      true,
 | 
			
		||||
      140
 | 
			
		||||
    ],
 | 
			
		||||
    "member-ordering": [
 | 
			
		||||
      true,
 | 
			
		||||
      {
 | 
			
		||||
        "order": [
 | 
			
		||||
          "static-field",
 | 
			
		||||
          "instance-field",
 | 
			
		||||
          "static-method",
 | 
			
		||||
          "instance-method"
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "no-console": [
 | 
			
		||||
      true,
 | 
			
		||||
      "debug",
 | 
			
		||||
      "info",
 | 
			
		||||
      "time",
 | 
			
		||||
      "timeEnd",
 | 
			
		||||
      "trace"
 | 
			
		||||
    ],
 | 
			
		||||
    "no-empty": false,
 | 
			
		||||
    "no-inferrable-types": [
 | 
			
		||||
      true,
 | 
			
		||||
      "ignore-params"
 | 
			
		||||
    ],
 | 
			
		||||
    "no-non-null-assertion": true,
 | 
			
		||||
    "no-redundant-jsdoc": true,
 | 
			
		||||
    "no-switch-case-fall-through": true,
 | 
			
		||||
    "no-var-requires": false,
 | 
			
		||||
    "object-literal-key-quotes": [
 | 
			
		||||
      true,
 | 
			
		||||
      "as-needed"
 | 
			
		||||
    ],
 | 
			
		||||
    "quotemark": [
 | 
			
		||||
      true,
 | 
			
		||||
      "single"
 | 
			
		||||
    ],
 | 
			
		||||
    "semicolon": {
 | 
			
		||||
      "options": [
 | 
			
		||||
        "always"
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "space-before-function-paren": {
 | 
			
		||||
      "options": {
 | 
			
		||||
        "anonymous": "never",
 | 
			
		||||
        "asyncArrow": "always",
 | 
			
		||||
        "constructor": "never",
 | 
			
		||||
        "method": "never",
 | 
			
		||||
        "named": "never"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "typedef-whitespace": {
 | 
			
		||||
      "options": [
 | 
			
		||||
        {
 | 
			
		||||
          "call-signature": "nospace",
 | 
			
		||||
          "index-signature": "nospace",
 | 
			
		||||
          "parameter": "nospace",
 | 
			
		||||
          "property-declaration": "nospace",
 | 
			
		||||
          "variable-declaration": "nospace"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "call-signature": "onespace",
 | 
			
		||||
          "index-signature": "onespace",
 | 
			
		||||
          "parameter": "onespace",
 | 
			
		||||
          "property-declaration": "onespace",
 | 
			
		||||
          "variable-declaration": "onespace"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "variable-name": {
 | 
			
		||||
      "options": [
 | 
			
		||||
        "ban-keywords",
 | 
			
		||||
        "check-format",
 | 
			
		||||
        "allow-pascal-case"
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "whitespace": {
 | 
			
		||||
      "options": [
 | 
			
		||||
        "check-branch",
 | 
			
		||||
        "check-decl",
 | 
			
		||||
        "check-operator",
 | 
			
		||||
        "check-separator",
 | 
			
		||||
        "check-type",
 | 
			
		||||
        "check-typecast"
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "no-conflicting-lifecycle": true,
 | 
			
		||||
    "no-host-metadata-property": true,
 | 
			
		||||
    "no-input-rename": true,
 | 
			
		||||
    "no-inputs-metadata-property": true,
 | 
			
		||||
    "no-output-native": true,
 | 
			
		||||
    "no-output-on-prefix": true,
 | 
			
		||||
    "no-output-rename": true,
 | 
			
		||||
    "no-outputs-metadata-property": true,
 | 
			
		||||
    "template-banana-in-box": true,
 | 
			
		||||
    "template-no-negated-async": true,
 | 
			
		||||
    "use-lifecycle-interface": true,
 | 
			
		||||
    "use-pipe-transform-interface": true
 | 
			
		||||
  },
 | 
			
		||||
  "rulesDirectory": [
 | 
			
		||||
    "codelyzer"
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@ -1,13 +0,0 @@
 | 
			
		||||
// vetur.config.js
 | 
			
		||||
/** @type {import('vls').VeturConfig} */
 | 
			
		||||
module.exports = {
 | 
			
		||||
  // override vscode settings
 | 
			
		||||
  // Notice: It only affects the settings used by Vetur.
 | 
			
		||||
  settings: {
 | 
			
		||||
    // "vetur.useWorkspaceDependencies": true,
 | 
			
		||||
    // "vetur.experimental.templateInterpolationService": true
 | 
			
		||||
  },
 | 
			
		||||
  projects: [
 | 
			
		||||
    './src/MyPrayerJournal/App'
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user