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 @@ |
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 | 3 | import { FormsModule } from '@angular/forms'; |
4 | 4 | import { HttpModule } from '@angular/http'; |
5 | 5 | |
6 | +import { AppRoutingModule } from './app-routing.module'; | |
7 | + | |
6 | 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 | 13 | @NgModule({ |
9 | 14 | declarations: [ |
10 | - AppComponent | |
15 | + AppComponent, | |
16 | + WizardBaseComponent, | |
17 | + ModalOneComponent, | |
18 | + ModalTwoComponent | |
11 | 19 | ], |
12 | 20 | imports: [ |
13 | 21 | BrowserModule, |
14 | 22 | FormsModule, |
15 | - HttpModule | |
23 | + HttpModule, | |
24 | + AppRoutingModule | |
16 | 25 | ], |
17 | 26 | providers: [], |
18 | 27 | bootstrap: [AppComponent] | ... | ... |
... | ... | @@ -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 @@ |
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 @@ |
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 | +} | ... | ... |
... | ... | @@ -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 @@ |
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 @@ |
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 @@ |
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 @@ |
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
src/styles.css
1 | 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 | +} | ... | ... |