Skip to content

Commit 6be103b

Browse files
committed
#14: implemented language switch, logout and register pages.
1 parent 1b90b2c commit 6be103b

File tree

10 files changed

+99
-106
lines changed

10 files changed

+99
-106
lines changed

angular/src/account/account.component.less

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@
1515

1616
div#LoginArea {
1717
margin-top: 0px !important;
18-
}
18+
max-width: 400px;
19+
margin: 120px auto 10px auto;
20+
}

angular/src/account/login/login.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
<div class="col-lg-12">
3030
<button id="LoginButton" type="submit" class="btn btn-primary" [disabled]="!loginForm.form.valid"><i class="fa fa-sign-in"></i> {{l("LogIn")}}</button>
3131
<span *ngIf="isSelfRegistrationAllowed">
32-
<a class="btn btn-success" routerLink="/register"><i class="fa fa-sign-in"></i> {{l("Register")}}</a>
32+
<a class="btn btn-success" [routerLink]="['../register']"><i class="fa fa-sign-in"></i> {{l("Register")}}</a>
3333
</span>
3434
</div>
3535
</div>

angular/src/account/login/login.component.less

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
#LoginArea {
2-
max-width: 400px;
3-
margin: 120px auto 10px auto;
4-
}
5-
6-
.social-icons {
1+
.social-icons {
72
padding-left: 0px;
83

94
li {

angular/src/account/login/login.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export class LoginComponent extends AppComponentBase {
3737
return false;
3838
}
3939

40-
return this.setting.getBoolean('App.UserManagement.AllowSelfRegistration');
40+
return true;
4141
}
4242

4343
login(): void {

angular/src/account/login/login.service.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@ export class LoginService {
100100

101101
this._logService.warn('Unexpected authenticateResult!');
102102
this._router.navigate(['account/login']);
103-
104103
}
105104
}
106105

@@ -117,7 +116,7 @@ export class LoginService {
117116
if (initialUrl.indexOf('/login') > 0) {
118117
initialUrl = AppConsts.appBaseUrl;
119118
}
120-
119+
debugger;
121120
location.href = initialUrl;
122121
}
123122

@@ -165,7 +164,9 @@ export class LoginService {
165164
clientId: loginProvider.clientId,
166165
scope: 'openid profile email'
167166
}).then(() => {
168-
gapi.auth2.getAuthInstance().isSignedIn.listen(this.googleLoginStatusChangeCallback);
167+
gapi.auth2.getAuthInstance().isSignedIn.listen((isSignedIn) => {
168+
this.googleLoginStatusChangeCallback(isSignedIn);
169+
});
169170
this.googleLoginStatusChangeCallback(gapi.auth2.getAuthInstance().isSignedIn.get());
170171
});
171172

Lines changed: 51 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,52 @@
11
<div [@routerTransition]>
2-
<h3 class="form-title">{{l("SignUp")}}</h3>
3-
4-
<form #registerForm="ngForm" class="login-form" method="post" novalidate (ngSubmit)="save()">
5-
6-
<p class="hint">
7-
{{l("PersonalInformations")}}
8-
</p>
9-
10-
<div class="form-group">
11-
<label class="control-label visible-ie8 visible-ie9">{{l("Name")}}</label>
12-
<input class="form-control placeholder-no-fix" autoFocus type="text" placeholder="{{l('Name')}}" [(ngModel)]="model.name" name="Name" required maxlength="32" />
13-
</div>
14-
15-
<div class="form-group">
16-
<label class="control-label visible-ie8 visible-ie9">{{l("Surname")}}</label>
17-
<input class="form-control placeholder-no-fix" type="text" placeholder="{{l('Surname')}}" [(ngModel)]="model.surname" name="Surname" required maxlength="32" />
18-
</div>
19-
20-
<div class="form-group">
21-
<label class="control-label visible-ie8 visible-ie9">{{l("EmailAddress")}}</label>
22-
<input class="form-control placeholder-no-fix" type="email" placeholder="{{l('EmailAddress')}}" [(ngModel)]="model.emailAddress" name="EmailAddress" required maxlength="256" pattern="^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{1,})+$" />
23-
</div>
24-
25-
<p class="hint">
26-
{{l("AccountSettings")}}
27-
</p>
28-
29-
<div class="form-group">
30-
<label class="control-label visible-ie8 visible-ie9">{{l("UserName")}}</label>
31-
<input class="form-control placeholder-no-fix input-ltr" type="text" autocomplete="off" placeholder="{{l('UserName')}}" name="UserName" [(ngModel)]="model.userName" required maxlength="32" />
32-
</div>
33-
<div class="form-group">
34-
<label class="control-label visible-ie8 visible-ie9">{{l("Password")}}</label>
35-
<input type="password" name="Password" class="form-control" [(ngModel)]="model.password" #Password="ngModel" placeholder="{{l('Password')}}" validateEqual="PasswordRepeat"
36-
reverse="true" [minlength]="passwordComplexitySetting.minLength" [maxlength]="passwordComplexitySetting.maxPasswordLength"
37-
required>
38-
</div>
39-
<div class="form-group">
40-
<label class="control-label visible-ie8 visible-ie9">{{l("PasswordRepeat")}}</label>
41-
<input type="password" name="PasswordRepeat" class="form-control" [ngModel]="model.passwordRepeat" placeholder="{{l('PasswordRepeat')}}" validateEqual="Password"
42-
reverse="false" required>
43-
</div>
44-
<div [hidden]="registerForm.form.valid || registerForm.form.pristine" class="form-group">
45-
<ul class="help-block text-danger" *ngIf="Password.errors">
46-
<li [hidden]="!Password.errors.minlength">{{l("PasswordComplexity_MinLength_Hint",passwordComplexitySetting.minLength)}}</li>
47-
<li [hidden]="!Password.errors.maxLenght">{{l("PasswordComplexity_MaxLength_Hint",passwordComplexitySetting.maxLength)}}</li>
48-
<li [hidden]="!Password.errors.useUpperCaseLetters">{{l("PasswordComplexity_UseUpperCaseLetters_Hint")}}</li>
49-
<li [hidden]="!Password.errors.useLowerCaseLetters">{{l("PasswordComplexity_UseLowerCaseLetters_Hint")}}</li>
50-
<li [hidden]="!Password.errors.useNumbers">{{l("PasswordComplexity_UseNumbers_Hint")}}</li>
51-
<li [hidden]="!Password.errors.usePunctuations">{{l("PasswordComplexity_UsePunctuations_Hint")}}</li>
52-
</ul>
53-
</div>
54-
55-
<div class="form-actions">
56-
<button [disabled]="saving" routerLink="/login" type="button" class="btn btn-default"><i class="fa fa-arrow-left"></i> {{l("Back")}}</button>
57-
<button type="submit" class="btn btn-success uppercase" [disabled]="!registerForm.form.valid"><i class="fa fa-check"></i> {{l("Submit")}}</button>
58-
</div>
59-
60-
</form>
61-
</div>
2+
<div class="container">
3+
<div id="LoginArea" class="row">
4+
<div class="col-lg-12">
5+
<div class="well bs-component">
6+
<h3 class="form-title">{{l("SignUp")}}</h3>
7+
8+
<form #registerForm="ngForm" class="login-form" method="post" novalidate (ngSubmit)="save()">
9+
10+
<p class="hint">
11+
{{l("PersonalInformations")}}
12+
</p>
13+
14+
<div class="form-group">
15+
<label class="control-label visible-ie8 visible-ie9">{{l("Name")}}</label>
16+
<input class="form-control placeholder-no-fix" autoFocus type="text" placeholder="{{l('Name')}}" [(ngModel)]="model.name" name="Name" required maxlength="32" />
17+
</div>
18+
19+
<div class="form-group">
20+
<label class="control-label visible-ie8 visible-ie9">{{l("Surname")}}</label>
21+
<input class="form-control placeholder-no-fix" type="text" placeholder="{{l('Surname')}}" [(ngModel)]="model.surname" name="Surname" required maxlength="32" />
22+
</div>
23+
24+
<div class="form-group">
25+
<label class="control-label visible-ie8 visible-ie9">{{l("EmailAddress")}}</label>
26+
<input class="form-control placeholder-no-fix" type="email" placeholder="{{l('EmailAddress')}}" [(ngModel)]="model.emailAddress" name="EmailAddress" required maxlength="256" pattern="^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{1,})+$" />
27+
</div>
28+
29+
<p class="hint">
30+
{{l("AccountSettings")}}
31+
</p>
32+
33+
<div class="form-group">
34+
<label class="control-label visible-ie8 visible-ie9">{{l("UserName")}}</label>
35+
<input class="form-control placeholder-no-fix input-ltr" type="text" autocomplete="off" placeholder="{{l('UserName')}}" name="UserName" [(ngModel)]="model.userName" required maxlength="32" />
36+
</div>
37+
<div class="form-group">
38+
<label class="control-label visible-ie8 visible-ie9">{{l("Password")}}</label>
39+
<input type="password" name="Password" class="form-control" [(ngModel)]="model.password" placeholder="{{l('Password')}}" required>
40+
</div>
41+
42+
<div class="form-actions">
43+
<button [disabled]="saving" [routerLink]="['../login']" type="button" class="btn btn-default"><i class="fa fa-arrow-left"></i> {{l("Back")}}</button>
44+
<button type="submit" class="btn btn-success uppercase" [disabled]="!registerForm.form.valid"><i class="fa fa-check"></i> {{l("Submit")}}</button>
45+
</div>
46+
47+
</form>
48+
</div>
49+
</div>
50+
</div>
51+
</div>
52+
</div>

angular/src/account/register/register.component.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,12 @@ export class RegisterComponent extends AppComponentBase {
2424
super(injector);
2525
}
2626

27-
get useCaptcha(): boolean {
28-
return this.setting.getBoolean('App.UserManagement.UseCaptchaOnRegistration');
29-
}
3027

3128
back(): void {
3229
this._router.navigate(['/login']);
3330
}
3431

3532
save(): void {
36-
if (this.useCaptcha && !this.model.captchaResponse) {
37-
this.message.warn(this.l('CaptchaCanNotBeEmpty'));
38-
return;
39-
}
40-
4133
this.saving = true;
4234
this._accountService.register(this.model)
4335
.finally(() => { this.saving = false; })
@@ -55,8 +47,4 @@ export class RegisterComponent extends AppComponentBase {
5547
this._loginService.authenticate(() => { this.saving = false; });
5648
});
5749
}
58-
59-
captchaResolved(captchaResponse: string): void {
60-
this.model.captchaResponse = captchaResponse;
61-
}
6250
}

angular/src/app/tenants/create-tenant-modal.component.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<span aria-hidden="true">&times;</span>
1111
</button>
1212
<h4 class="modal-title">
13-
<span>{{l("ChangeTenant")}}</span>
13+
<span>{{l("CreateNewTenant")}}</span>
1414
</h4>
1515
</div>
1616

@@ -29,7 +29,7 @@ <h4 class="modal-title">
2929
</div>
3030
<div class="form-group">
3131
<label>{{l("AdminEmailAddress")}}</label>
32-
<input type="email" name="AdminEmailAddress" class="form-control" [(ngModel)]="tenant.adminEmailAddress" required maxlength="256">
32+
<input type="email" name="AdminEmailAddress" class="form-control" [(ngModel)]="tenant.adminEmailAddress" required maxlength="256" pattern="^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{1,})+$">
3333
</div>
3434
<p>{{l("DefaultPasswordIs","123qwe")}}</p>
3535
</div>

angular/src/shared/layout/topbar.component.html

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,28 @@
2121
</template>
2222
</ul>
2323
<ul class="nav navbar-nav navbar-right">
24-
<!-- UserMenuOrLoginLinkViewComponent -->
25-
<!-- UserMenuOrLoginLinkViewComponent -->
24+
<li class="dropdown">
25+
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
26+
<i class="{{currentLanguage.icon}}"></i>
27+
<span>{{currentLanguage.displayName}}</span>
28+
<b class="caret"></b>
29+
</a>
30+
<ul class="dropdown-menu">
31+
<li *ngFor="let language of languages">
32+
<a *ngIf="language.name != currentLanguage.name" href="#" (click)="changeLanguage(language.name)"><i class="{{language.icon}}"></i> {{language.displayName}}</a>
33+
</li>
34+
</ul>
35+
</li>
36+
37+
<li class="dropdown" *ngIf="userIsLoggedIn()">
38+
<a href="" data-toggle="dropdown"><i class="fa fa-user"></i> <span>{{shownLoginName}}</span> <b class="caret"></b></a>
39+
<ul class="dropdown-menu">
40+
<li><a href="#" (click)="logout()"><i class="fa fa-sign-out"></i> {{l('Logout')}}</a></li>
41+
</ul>
42+
</li>
43+
<li *ngIf="!userIsLoggedIn()">
44+
<a href="#" [routerLink]="['../account/login']"><i class="fa fa-sign-in"></i> {{l('LogIn')}}</a>
45+
</li>
2646
</ul>
2747
</div>
2848
</div>

angular/src/shared/layout/topbar.component.ts

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Component, OnInit, Injector, ViewEncapsulation, ViewChild } from '@angular/core';
2+
import { Router } from '@angular/router';
23
import { LocalizationService } from '@abp/localization/localization.service';
34
import { AbpSessionService } from '@abp/session/abp-session.service';
45
import { AbpMultiTenancyService } from '@abp/multi-tenancy/abp-multi-tenancy.service';
@@ -29,7 +30,8 @@ export class TopBarComponent extends AppComponentBase implements OnInit {
2930
private _sessionService: AbpSessionService,
3031
private abpMultiTenancyService: AbpMultiTenancyService,
3132
private userServiceProxy: UserServiceProxy,
32-
private _authService: AppAuthService
33+
private _authService: AppAuthService,
34+
private _router: Router
3335
) {
3436
super(injector);
3537
}
@@ -42,14 +44,13 @@ export class TopBarComponent extends AppComponentBase implements OnInit {
4244
];
4345

4446
ngOnInit() {
47+
this.getCurrentLoginInformations();
4548
this.languages = this.localization.languages;
4649
this.currentLanguage = this.localization.currentLanguage;
47-
48-
this.getCurrentLoginInformations();
4950
}
5051

5152
showMenuItem(menuItem): boolean {
52-
53+
5354
if (menuItem.permissionName) {
5455
return this.permission.isGranted(menuItem.permissionName);
5556
}
@@ -62,23 +63,18 @@ export class TopBarComponent extends AppComponentBase implements OnInit {
6263
}
6364

6465
changeLanguage(languageName: string): void {
65-
//let input = new ChangeUserLanguageDto();
66-
//input.languageName = languageName;
67-
68-
//this.userServiceProxy.changeLanguage(input).subscribe(() => {
69-
// abp.utils.setCookieValue(
70-
// "Abp.Localization.CultureName",
71-
// languageName,
72-
// new Date(new Date().getTime() + 5 * 365 * 86400000), //5 year
73-
// abp.appPath
74-
// );
75-
76-
// window.location.reload();
77-
//});
66+
abp.utils.setCookieValue("Abp.Localization.CultureName", languageName);
67+
location.reload();
7868
}
7969

8070
getCurrentLoginInformations(): void {
81-
//this.shownLoginName = this.appSession.getShownLoginName();
71+
if (this.appSession.userId > 0) {
72+
this.shownLoginName = this.appSession.getShownLoginName();
73+
}
74+
}
75+
76+
userIsLoggedIn(): boolean {
77+
return this.appSession.userId > 0;
8278
}
8379

8480
logout(): void {

0 commit comments

Comments
 (0)