Merge pull request #29 from MycroftAI/not-found-page
added a library application to build a standard 404 pagepull/28/head^2
commit
6bdada2283
|
@ -30,9 +30,9 @@
|
||||||
"src/styles.scss"
|
"src/styles.scss"
|
||||||
],
|
],
|
||||||
"stylePreprocessorOptions": {
|
"stylePreprocessorOptions": {
|
||||||
"includePaths": [
|
"includePaths": [
|
||||||
"./src/stylesheets"
|
"./src/stylesheets"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"scripts": []
|
"scripts": []
|
||||||
},
|
},
|
||||||
|
@ -91,9 +91,9 @@
|
||||||
"src/styles.scss"
|
"src/styles.scss"
|
||||||
],
|
],
|
||||||
"stylePreprocessorOptions": {
|
"stylePreprocessorOptions": {
|
||||||
"includePaths": [
|
"includePaths": [
|
||||||
"./src/stylesheets"
|
"./src/stylesheets"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"scripts": [],
|
"scripts": [],
|
||||||
"assets": [
|
"assets": [
|
||||||
|
@ -190,9 +190,9 @@
|
||||||
"src/styles.scss"
|
"src/styles.scss"
|
||||||
],
|
],
|
||||||
"stylePreprocessorOptions": {
|
"stylePreprocessorOptions": {
|
||||||
"includePaths": [
|
"includePaths": [
|
||||||
"./src/stylesheets"
|
"./src/stylesheets"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"scripts": []
|
"scripts": []
|
||||||
},
|
},
|
||||||
|
@ -267,9 +267,9 @@
|
||||||
"src/styles.scss"
|
"src/styles.scss"
|
||||||
],
|
],
|
||||||
"stylePreprocessorOptions": {
|
"stylePreprocessorOptions": {
|
||||||
"includePaths": [
|
"includePaths": [
|
||||||
"./src/stylesheets"
|
"./src/stylesheets"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"scripts": [],
|
"scripts": [],
|
||||||
"assets": [
|
"assets": [
|
||||||
|
@ -366,9 +366,9 @@
|
||||||
"src/styles.scss"
|
"src/styles.scss"
|
||||||
],
|
],
|
||||||
"stylePreprocessorOptions": {
|
"stylePreprocessorOptions": {
|
||||||
"includePaths": [
|
"includePaths": [
|
||||||
"./src/stylesheets"
|
"./src/stylesheets"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"scripts": []
|
"scripts": []
|
||||||
},
|
},
|
||||||
|
@ -443,9 +443,9 @@
|
||||||
"src/styles.scss"
|
"src/styles.scss"
|
||||||
],
|
],
|
||||||
"stylePreprocessorOptions": {
|
"stylePreprocessorOptions": {
|
||||||
"includePaths": [
|
"includePaths": [
|
||||||
"./src/stylesheets"
|
"./src/stylesheets"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"scripts": [],
|
"scripts": [],
|
||||||
"assets": [
|
"assets": [
|
||||||
|
@ -577,9 +577,9 @@
|
||||||
"src/styles.scss"
|
"src/styles.scss"
|
||||||
],
|
],
|
||||||
"stylePreprocessorOptions": {
|
"stylePreprocessorOptions": {
|
||||||
"includePaths": [
|
"includePaths": [
|
||||||
"./src/stylesheets"
|
"./src/stylesheets"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"scripts": []
|
"scripts": []
|
||||||
},
|
},
|
||||||
|
@ -638,9 +638,9 @@
|
||||||
"src/styles.scss"
|
"src/styles.scss"
|
||||||
],
|
],
|
||||||
"stylePreprocessorOptions": {
|
"stylePreprocessorOptions": {
|
||||||
"includePaths": [
|
"includePaths": [
|
||||||
"./src/stylesheets"
|
"./src/stylesheets"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"scripts": [],
|
"scripts": [],
|
||||||
"assets": [
|
"assets": [
|
||||||
|
@ -690,7 +690,42 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"page-not-found": {
|
||||||
|
"root": "projects/page-not-found",
|
||||||
|
"sourceRoot": "projects/page-not-found/src",
|
||||||
|
"projectType": "library",
|
||||||
|
"prefix": "lib",
|
||||||
|
"architect": {
|
||||||
|
"build": {
|
||||||
|
"builder": "@angular-devkit/build-ng-packagr:build",
|
||||||
|
"options": {
|
||||||
|
"tsConfig": "projects/page-not-found/tsconfig.lib.json",
|
||||||
|
"project": "projects/page-not-found/ng-package.json"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"test": {
|
||||||
|
"builder": "@angular-devkit/build-angular:karma",
|
||||||
|
"options": {
|
||||||
|
"main": "projects/page-not-found/src/test.ts",
|
||||||
|
"tsConfig": "projects/page-not-found/tsconfig.spec.json",
|
||||||
|
"karmaConfig": "projects/page-not-found/karma.conf.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lint": {
|
||||||
|
"builder": "@angular-devkit/build-angular:tslint",
|
||||||
|
"options": {
|
||||||
|
"tsConfig": [
|
||||||
|
"projects/page-not-found/tsconfig.lib.json",
|
||||||
|
"projects/page-not-found/tsconfig.spec.json"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"**/node_modules/**"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"defaultProject": "internet"
|
"defaultProject": "internet"
|
||||||
}
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import { Routes, RouterModule } from '@angular/router';
|
import { Routes, RouterModule } from '@angular/router';
|
||||||
|
|
||||||
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';
|
import { PageNotFoundComponent } from 'page-not-found';
|
||||||
|
|
||||||
const routes: Routes = [
|
const routes: Routes = [
|
||||||
{ path: '', redirectTo: '/skills', pathMatch: 'full' },
|
{ path: '', redirectTo: '/skills', pathMatch: 'full' },
|
||||||
|
|
|
@ -1,9 +1,3 @@
|
||||||
#app-body {
|
|
||||||
margin-left: 3vw;
|
|
||||||
margin-right: 3vw;
|
|
||||||
margin-top: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
img {
|
||||||
height: 20px;
|
height: 20px;
|
||||||
margin-top: -7px;
|
margin-top: -7px;
|
||||||
|
|
|
@ -7,6 +7,7 @@ import { AppRoutingModule } from './app-routing.module';
|
||||||
import { AppComponent } from './app.component';
|
import { AppComponent } from './app.component';
|
||||||
import { AppService } from './app.service';
|
import { AppService } from './app.service';
|
||||||
import { GlobalnavModule } from 'globalnav';
|
import { GlobalnavModule } from 'globalnav';
|
||||||
|
import { PageNotFoundModule } from 'page-not-found';
|
||||||
import { MaterialModule } from './shared/material.module';
|
import { MaterialModule } from './shared/material.module';
|
||||||
import { SkillsModule } from './skills/skills.module';
|
import { SkillsModule } from './skills/skills.module';
|
||||||
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';
|
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';
|
||||||
|
@ -20,6 +21,7 @@ import { PageNotFoundComponent } from './page-not-found/page-not-found.component
|
||||||
GlobalnavModule,
|
GlobalnavModule,
|
||||||
HttpClientModule,
|
HttpClientModule,
|
||||||
MaterialModule,
|
MaterialModule,
|
||||||
|
PageNotFoundModule,
|
||||||
SkillsModule,
|
SkillsModule,
|
||||||
AppRoutingModule
|
AppRoutingModule
|
||||||
],
|
],
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
// 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'),
|
||||||
|
reports: ['html', 'lcovonly'],
|
||||||
|
fixWebpackSourcePaths: true
|
||||||
|
},
|
||||||
|
reporters: ['progress', 'kjhtml'],
|
||||||
|
port: 9876,
|
||||||
|
colors: true,
|
||||||
|
logLevel: config.LOG_INFO,
|
||||||
|
autoWatch: true,
|
||||||
|
browsers: ['Chrome'],
|
||||||
|
singleRun: false
|
||||||
|
});
|
||||||
|
};
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
|
||||||
|
"dest": "../../dist/page-not-found",
|
||||||
|
"lib": {
|
||||||
|
"entryFile": "src/public_api.ts",
|
||||||
|
"cssUrl": "inline"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"name": "page-not-found",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"peerDependencies": {
|
||||||
|
"@angular/common": "^7.0.0",
|
||||||
|
"@angular/core": "^7.0.0"
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 35 KiB |
|
@ -0,0 +1,9 @@
|
||||||
|
<div id="page-not-found-bg" fxLayout="row" fxLayoutAlign="start stretch">
|
||||||
|
<div id="page-not-found-fg" fxFlex fxLayout="column" fxLayoutAlign="center center">
|
||||||
|
<div class="mat-h1" fxFlex="5" fxFlexOffset="20">PAGE NOT FOUND</div>
|
||||||
|
<div class="page-not-found-logo" fxFlex="30"></div>
|
||||||
|
<div fxFlex fxFlexOffset="5">
|
||||||
|
<button mat-raised-button class="back-button" (click)="navigateBack()">GO BACK</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1,22 @@
|
||||||
|
#page-not-found-bg {
|
||||||
|
background-color: #22a7f0;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
#page-not-found-fg {
|
||||||
|
.mat-h1 {
|
||||||
|
font-size: 32px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.page-not-found-logo {
|
||||||
|
background: url("mycroft-not-found-logo.svg") no-repeat;
|
||||||
|
height: 200px;
|
||||||
|
width: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button {
|
||||||
|
background-color: #2c3e50;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
import { Component} from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'lib-page-not-found',
|
||||||
|
templateUrl: './page-not-found.component.html',
|
||||||
|
styleUrls: ['./page-not-found.component.scss']
|
||||||
|
})
|
||||||
|
export class PageNotFoundComponent {
|
||||||
|
|
||||||
|
constructor() { }
|
||||||
|
|
||||||
|
navigateBack() {
|
||||||
|
window.history.back();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { FlexLayoutModule } from '@angular/flex-layout';
|
||||||
|
import { MatButtonModule } from '@angular/material';
|
||||||
|
|
||||||
|
import { PageNotFoundComponent } from './page-not-found.component';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [
|
||||||
|
FlexLayoutModule,
|
||||||
|
MatButtonModule
|
||||||
|
],
|
||||||
|
declarations: [
|
||||||
|
PageNotFoundComponent
|
||||||
|
],
|
||||||
|
exports: [
|
||||||
|
PageNotFoundComponent
|
||||||
|
]
|
||||||
|
})
|
||||||
|
export class PageNotFoundModule { }
|
|
@ -0,0 +1,9 @@
|
||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class PageNotFoundService {
|
||||||
|
|
||||||
|
constructor() { }
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
/*
|
||||||
|
* Public API Surface of page-not-found
|
||||||
|
*/
|
||||||
|
|
||||||
|
export * from './lib/page-not-found.service';
|
||||||
|
export * from './lib/page-not-found.component';
|
||||||
|
export * from './lib/page-not-found.module';
|
|
@ -0,0 +1,22 @@
|
||||||
|
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
|
||||||
|
|
||||||
|
import 'core-js/es7/reflect';
|
||||||
|
import 'zone.js/dist/zone';
|
||||||
|
import 'zone.js/dist/zone-testing';
|
||||||
|
import { getTestBed } from '@angular/core/testing';
|
||||||
|
import {
|
||||||
|
BrowserDynamicTestingModule,
|
||||||
|
platformBrowserDynamicTesting
|
||||||
|
} from '@angular/platform-browser-dynamic/testing';
|
||||||
|
|
||||||
|
declare const require: any;
|
||||||
|
|
||||||
|
// 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);
|
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../../out-tsc/lib",
|
||||||
|
"target": "es2015",
|
||||||
|
"module": "es2015",
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"declaration": true,
|
||||||
|
"sourceMap": true,
|
||||||
|
"inlineSources": true,
|
||||||
|
"emitDecoratorMetadata": true,
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"importHelpers": true,
|
||||||
|
"types": [],
|
||||||
|
"lib": [
|
||||||
|
"dom",
|
||||||
|
"es2018"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"angularCompilerOptions": {
|
||||||
|
"annotateForClosureCompiler": true,
|
||||||
|
"skipTemplateCodegen": true,
|
||||||
|
"strictMetadataEmit": true,
|
||||||
|
"fullTemplateTypeCheck": true,
|
||||||
|
"strictInjectionParameters": true,
|
||||||
|
"enableResourceInlining": true
|
||||||
|
},
|
||||||
|
"exclude": [
|
||||||
|
"src/test.ts",
|
||||||
|
"**/*.spec.ts"
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../../out-tsc/spec",
|
||||||
|
"types": [
|
||||||
|
"jasmine",
|
||||||
|
"node"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"src/test.ts"
|
||||||
|
],
|
||||||
|
"include": [
|
||||||
|
"**/*.spec.ts",
|
||||||
|
"**/*.d.ts"
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tslint.json",
|
||||||
|
"rules": {
|
||||||
|
"directive-selector": [
|
||||||
|
true,
|
||||||
|
"attribute",
|
||||||
|
"lib",
|
||||||
|
"camelCase"
|
||||||
|
],
|
||||||
|
"component-selector": [
|
||||||
|
true,
|
||||||
|
"element",
|
||||||
|
"lib",
|
||||||
|
"kebab-case"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,13 +3,13 @@ import { Routes, RouterModule } from '@angular/router';
|
||||||
|
|
||||||
import { LoginComponent } from './login/login.component';
|
import { LoginComponent } from './login/login.component';
|
||||||
import { LogoutComponent } from './logout/logout.component';
|
import { LogoutComponent } from './logout/logout.component';
|
||||||
// import { PageNotFoundComponent } from './page-not-found/page-not-found.component';
|
import { PageNotFoundComponent } from 'page-not-found';
|
||||||
|
|
||||||
const routes: Routes = [
|
const routes: Routes = [
|
||||||
{ path: 'login', component: LoginComponent },
|
{ path: 'login', component: LoginComponent },
|
||||||
{ path: 'logout', component: LogoutComponent },
|
{ path: 'logout', component: LogoutComponent },
|
||||||
{ path: '', redirectTo: '/login', pathMatch: 'full' },
|
{ path: '', redirectTo: '/login', pathMatch: 'full' },
|
||||||
// { path: '**', component: PageNotFoundComponent }
|
{ path: '**', component: PageNotFoundComponent }
|
||||||
];
|
];
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
|
|
|
@ -8,6 +8,7 @@ import { AppRoutingModule } from './app-routing.module';
|
||||||
import { BackgroundModule } from './background/background.module';
|
import { BackgroundModule } from './background/background.module';
|
||||||
import { LoginModule } from './login/login.module';
|
import { LoginModule } from './login/login.module';
|
||||||
import { LogoutModule } from './logout/logout.module';
|
import { LogoutModule } from './logout/logout.module';
|
||||||
|
import { PageNotFoundModule } from 'page-not-found';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [ AppComponent ],
|
declarations: [ AppComponent ],
|
||||||
|
@ -18,6 +19,7 @@ import { LogoutModule } from './logout/logout.module';
|
||||||
FlexLayoutModule,
|
FlexLayoutModule,
|
||||||
LoginModule,
|
LoginModule,
|
||||||
LogoutModule,
|
LogoutModule,
|
||||||
|
PageNotFoundModule,
|
||||||
AppRoutingModule
|
AppRoutingModule
|
||||||
],
|
],
|
||||||
providers: [ ],
|
providers: [ ],
|
||||||
|
|
|
@ -23,6 +23,12 @@
|
||||||
],
|
],
|
||||||
"globalnav/*": [
|
"globalnav/*": [
|
||||||
"dist/globalnav/*"
|
"dist/globalnav/*"
|
||||||
|
],
|
||||||
|
"page-not-found": [
|
||||||
|
"dist/page-not-found"
|
||||||
|
],
|
||||||
|
"page-not-found/*": [
|
||||||
|
"dist/page-not-found/*"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue