Commit 4fc210970b70f7d3197690222ea789934d2e8485
1 parent
aeb06133
Exists in
master
first commit
Showing
17 changed files
with
265 additions
and
5 deletions
Show diff stats
@@ -0,0 +1,25 @@ | @@ -0,0 +1,25 @@ | ||
1 | +import { NgModule } from '@angular/core'; | ||
2 | +import { RouterModule, Routes } from '@angular/router'; | ||
3 | + | ||
4 | +import { WizardBaseComponent } from './wizard-base/wizard-base.component'; | ||
5 | +import { ModalOneComponent } from './wizard-base/modal-one/modal-one.component'; | ||
6 | +import { ModalTwoComponent } from './wizard-base/modal-two/modal-two.component'; | ||
7 | + | ||
8 | +const routes: Routes = [ | ||
9 | + { | ||
10 | + path: 'wizard', | ||
11 | + component: WizardBaseComponent, | ||
12 | + children: [ | ||
13 | + { path: '1', component: ModalOneComponent }, | ||
14 | + { path: '2', component: ModalTwoComponent }, | ||
15 | + ] | ||
16 | + }, | ||
17 | + { path: '', redirectTo: '/wizard', pathMatch: 'full' }, | ||
18 | +]; | ||
19 | + | ||
20 | +@NgModule({ | ||
21 | + imports: [ RouterModule.forRoot(routes) ], | ||
22 | + exports: [ RouterModule ] | ||
23 | +}) | ||
24 | +export class AppRoutingModule { | ||
25 | +} |
src/app/app.component.html
src/app/app.module.ts
@@ -3,16 +3,25 @@ import { NgModule } from '@angular/core'; | @@ -3,16 +3,25 @@ import { NgModule } from '@angular/core'; | ||
3 | import { FormsModule } from '@angular/forms'; | 3 | import { FormsModule } from '@angular/forms'; |
4 | import { HttpModule } from '@angular/http'; | 4 | import { HttpModule } from '@angular/http'; |
5 | 5 | ||
6 | +import { AppRoutingModule } from './app-routing.module'; | ||
7 | + | ||
6 | import { AppComponent } from './app.component'; | 8 | import { AppComponent } from './app.component'; |
9 | +import { WizardBaseComponent } from './wizard-base/wizard-base.component'; | ||
10 | +import { ModalOneComponent } from './wizard-base/modal-one/modal-one.component'; | ||
11 | +import { ModalTwoComponent } from './wizard-base/modal-two/modal-two.component'; | ||
7 | 12 | ||
8 | @NgModule({ | 13 | @NgModule({ |
9 | declarations: [ | 14 | declarations: [ |
10 | - AppComponent | 15 | + AppComponent, |
16 | + WizardBaseComponent, | ||
17 | + ModalOneComponent, | ||
18 | + ModalTwoComponent | ||
11 | ], | 19 | ], |
12 | imports: [ | 20 | imports: [ |
13 | BrowserModule, | 21 | BrowserModule, |
14 | FormsModule, | 22 | FormsModule, |
15 | - HttpModule | 23 | + HttpModule, |
24 | + AppRoutingModule | ||
16 | ], | 25 | ], |
17 | providers: [], | 26 | providers: [], |
18 | bootstrap: [AppComponent] | 27 | bootstrap: [AppComponent] |
src/app/wizard-base/modal-one/modal-one.component.html
0 โ 100644
@@ -0,0 +1,19 @@ | @@ -0,0 +1,19 @@ | ||
1 | +<div id="myModal" class="modal"> | ||
2 | + | ||
3 | + <!-- Modal content --> | ||
4 | + <div class="modal-content"> | ||
5 | + <div class="modal-header"> | ||
6 | + <span class="close">×</span> | ||
7 | + <h2>Modal Header One</h2> | ||
8 | + </div> | ||
9 | + <div class="modal-body"> | ||
10 | + <p>Some text in the Modal Body</p> | ||
11 | + <p>Some other text...</p> | ||
12 | + </div> | ||
13 | + <div class="modal-footer"> | ||
14 | + <h3>Modal Footer</h3> | ||
15 | + <button [routerLink]="['/wizard', 2]">Next</button> | ||
16 | + </div> | ||
17 | + </div> | ||
18 | + | ||
19 | +</div> |
src/app/wizard-base/modal-one/modal-one.component.spec.ts
0 โ 100644
@@ -0,0 +1,25 @@ | @@ -0,0 +1,25 @@ | ||
1 | +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | ||
2 | + | ||
3 | +import { ModalOneComponent } from './modal-one.component'; | ||
4 | + | ||
5 | +describe('ModalOneComponent', () => { | ||
6 | + let component: ModalOneComponent; | ||
7 | + let fixture: ComponentFixture<ModalOneComponent>; | ||
8 | + | ||
9 | + beforeEach(async(() => { | ||
10 | + TestBed.configureTestingModule({ | ||
11 | + declarations: [ ModalOneComponent ] | ||
12 | + }) | ||
13 | + .compileComponents(); | ||
14 | + })); | ||
15 | + | ||
16 | + beforeEach(() => { | ||
17 | + fixture = TestBed.createComponent(ModalOneComponent); | ||
18 | + component = fixture.componentInstance; | ||
19 | + fixture.detectChanges(); | ||
20 | + }); | ||
21 | + | ||
22 | + it('should create', () => { | ||
23 | + expect(component).toBeTruthy(); | ||
24 | + }); | ||
25 | +}); |
@@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
1 | +import { Component, OnInit } from '@angular/core'; | ||
2 | + | ||
3 | +@Component({ | ||
4 | + selector: 'app-modal-one', | ||
5 | + templateUrl: './modal-one.component.html', | ||
6 | + styleUrls: ['./modal-one.component.css'] | ||
7 | +}) | ||
8 | +export class ModalOneComponent implements OnInit { | ||
9 | + | ||
10 | + constructor() { } | ||
11 | + | ||
12 | + ngOnInit() { | ||
13 | + } | ||
14 | + | ||
15 | +} |
src/app/wizard-base/modal-two/modal-two.component.html
0 โ 100644
@@ -0,0 +1,19 @@ | @@ -0,0 +1,19 @@ | ||
1 | +<div id="myModal" class="modal"> | ||
2 | + | ||
3 | + <!-- Modal content --> | ||
4 | + <div class="modal-content"> | ||
5 | + <div class="modal-header"> | ||
6 | + <span class="close">×</span> | ||
7 | + <h2>Modal Header Two</h2> | ||
8 | + </div> | ||
9 | + <div class="modal-body"> | ||
10 | + <p>Some text in the Modal Body</p> | ||
11 | + <p>Some other text...</p> | ||
12 | + </div> | ||
13 | + <div class="modal-footer"> | ||
14 | + <h3>Modal Footer</h3> | ||
15 | + <button [routerLink]="['/wizard', 1]">Prev</button> | ||
16 | + </div> | ||
17 | + </div> | ||
18 | + | ||
19 | +</div> |
src/app/wizard-base/modal-two/modal-two.component.spec.ts
0 โ 100644
@@ -0,0 +1,25 @@ | @@ -0,0 +1,25 @@ | ||
1 | +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | ||
2 | + | ||
3 | +import { ModalTwoComponent } from './modal-two.component'; | ||
4 | + | ||
5 | +describe('ModalTwoComponent', () => { | ||
6 | + let component: ModalTwoComponent; | ||
7 | + let fixture: ComponentFixture<ModalTwoComponent>; | ||
8 | + | ||
9 | + beforeEach(async(() => { | ||
10 | + TestBed.configureTestingModule({ | ||
11 | + declarations: [ ModalTwoComponent ] | ||
12 | + }) | ||
13 | + .compileComponents(); | ||
14 | + })); | ||
15 | + | ||
16 | + beforeEach(() => { | ||
17 | + fixture = TestBed.createComponent(ModalTwoComponent); | ||
18 | + component = fixture.componentInstance; | ||
19 | + fixture.detectChanges(); | ||
20 | + }); | ||
21 | + | ||
22 | + it('should create', () => { | ||
23 | + expect(component).toBeTruthy(); | ||
24 | + }); | ||
25 | +}); |
@@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
1 | +import { Component, OnInit } from '@angular/core'; | ||
2 | + | ||
3 | +@Component({ | ||
4 | + selector: 'app-modal-two', | ||
5 | + templateUrl: './modal-two.component.html', | ||
6 | + styleUrls: ['./modal-two.component.css'] | ||
7 | +}) | ||
8 | +export class ModalTwoComponent implements OnInit { | ||
9 | + | ||
10 | + constructor() { } | ||
11 | + | ||
12 | + ngOnInit() { | ||
13 | + } | ||
14 | + | ||
15 | +} |
@@ -0,0 +1,25 @@ | @@ -0,0 +1,25 @@ | ||
1 | +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | ||
2 | + | ||
3 | +import { WizardBaseComponent } from './wizard-base.component'; | ||
4 | + | ||
5 | +describe('WizardBaseComponent', () => { | ||
6 | + let component: WizardBaseComponent; | ||
7 | + let fixture: ComponentFixture<WizardBaseComponent>; | ||
8 | + | ||
9 | + beforeEach(async(() => { | ||
10 | + TestBed.configureTestingModule({ | ||
11 | + declarations: [ WizardBaseComponent ] | ||
12 | + }) | ||
13 | + .compileComponents(); | ||
14 | + })); | ||
15 | + | ||
16 | + beforeEach(() => { | ||
17 | + fixture = TestBed.createComponent(WizardBaseComponent); | ||
18 | + component = fixture.componentInstance; | ||
19 | + fixture.detectChanges(); | ||
20 | + }); | ||
21 | + | ||
22 | + it('should create', () => { | ||
23 | + expect(component).toBeTruthy(); | ||
24 | + }); | ||
25 | +}); |
@@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
1 | +import { Component, OnInit } from '@angular/core'; | ||
2 | + | ||
3 | +@Component({ | ||
4 | + selector: 'app-wizard-base', | ||
5 | + templateUrl: './wizard-base.component.html', | ||
6 | + styleUrls: ['./wizard-base.component.css'] | ||
7 | +}) | ||
8 | +export class WizardBaseComponent implements OnInit { | ||
9 | + | ||
10 | + constructor() { } | ||
11 | + | ||
12 | + ngOnInit() { | ||
13 | + } | ||
14 | + | ||
15 | +} |
src/index.html
@@ -7,6 +7,7 @@ | @@ -7,6 +7,7 @@ | ||
7 | 7 | ||
8 | <meta name="viewport" content="width=device-width, initial-scale=1"> | 8 | <meta name="viewport" content="width=device-width, initial-scale=1"> |
9 | <link rel="icon" type="image/x-icon" href="favicon.ico"> | 9 | <link rel="icon" type="image/x-icon" href="favicon.ico"> |
10 | + <link rel="stylesheet" href="styles.css"> | ||
10 | </head> | 11 | </head> |
11 | <body> | 12 | <body> |
12 | <app-root>Loading...</app-root> | 13 | <app-root>Loading...</app-root> |
src/styles.css
1 | /* You can add global styles to this file, and also import other style files */ | 1 | /* You can add global styles to this file, and also import other style files */ |
2 | +/* The Modal (background) */ | ||
3 | +.modal { | ||
4 | + | ||
5 | + position: fixed; /* Stay in place */ | ||
6 | + z-index: 1; /* Sit on top */ | ||
7 | + padding-top: 100px; /* Location of the box */ | ||
8 | + left: 0; | ||
9 | + top: 0; | ||
10 | + width: 100%; /* Full width */ | ||
11 | + height: 100%; /* Full height */ | ||
12 | + overflow: auto; /* Enable scroll if needed */ | ||
13 | + background-color: rgb(0,0,0); /* Fallback color */ | ||
14 | + background-color: rgba(0,0,0,0.4); /* Black w/ opacity */ | ||
15 | +} | ||
16 | + | ||
17 | +/* Modal Content */ | ||
18 | +.modal-content { | ||
19 | + position: relative; | ||
20 | + background-color: #fefefe; | ||
21 | + margin: auto; | ||
22 | + padding: 0; | ||
23 | + border: 1px solid #888; | ||
24 | + width: 80%; | ||
25 | + box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19); | ||
26 | +} | ||
27 | + | ||
28 | +/* Add Animation */ | ||
29 | +@-webkit-keyframes animatetop { | ||
30 | + from {top:-300px; opacity:0} | ||
31 | + to {top:0; opacity:1} | ||
32 | +} | ||
33 | + | ||
34 | +@keyframes animatetop { | ||
35 | + from {top:-300px; opacity:0} | ||
36 | + to {top:0; opacity:1} | ||
37 | +} | ||
38 | + | ||
39 | +/* The Close Button */ | ||
40 | +.close { | ||
41 | + color: white; | ||
42 | + float: right; | ||
43 | + font-size: 28px; | ||
44 | + font-weight: bold; | ||
45 | +} | ||
46 | + | ||
47 | +.close:hover, | ||
48 | +.close:focus { | ||
49 | + color: #000; | ||
50 | + text-decoration: none; | ||
51 | + cursor: pointer; | ||
52 | +} | ||
53 | + | ||
54 | +.modal-header { | ||
55 | + padding: 2px 16px; | ||
56 | + background-color: #5cb85c; | ||
57 | + color: white; | ||
58 | +} | ||
59 | + | ||
60 | +.modal-body {padding: 2px 16px;} | ||
61 | + | ||
62 | +.modal-footer { | ||
63 | + padding: 2px 16px; | ||
64 | + background-color: #5cb85c; | ||
65 | + color: white; | ||
66 | +} |