diff --git a/src/app/domain/config.ts b/src/app/domain/config.ts index e8816370a8d..c067be2bee4 100644 --- a/src/app/domain/config.ts +++ b/src/app/domain/config.ts @@ -3,6 +3,7 @@ export class Config { googleAnalyticsId?: string; googleClientId?: string; isGoogleClassroomEnabled?: boolean; + microsoftClientId?: string; recaptchaPublicKey?: string; logOutURL: string; currentTime: number; diff --git a/src/app/domain/user.ts b/src/app/domain/user.ts index 2b0119ac1e0..cb64a9233ce 100644 --- a/src/app/domain/user.ts +++ b/src/app/domain/user.ts @@ -7,6 +7,7 @@ export class User { isRecaptchaRequired: boolean; language: string; lastName: string; + microsoftUserId: string; permissions: number[]; roles: string[]; token: string; diff --git a/src/app/login/login-home/login-home.component.html b/src/app/login/login-home/login-home.component.html index 735a4c5adf0..8dcefb13eb4 100644 --- a/src/app/login/login-home/login-home.component.html +++ b/src/app/login/login-home/login-home.component.html @@ -60,9 +60,9 @@

Sign in to WISE

-
+

- or -

-

+

+

+ +

diff --git a/src/app/login/login-home/login-home.component.ts b/src/app/login/login-home/login-home.component.ts index 72488209543..0bf14e203d8 100644 --- a/src/app/login/login-home/login-home.component.ts +++ b/src/app/login/login-home/login-home.component.ts @@ -13,14 +13,15 @@ import { lastValueFrom } from 'rxjs'; export class LoginHomeComponent implements OnInit { accessCode: string = ''; credentials: any = { username: '', password: '', recaptchaResponse: null }; - isGoogleAuthenticationEnabled: boolean = false; + protected googleAuthenticationEnabled: boolean = false; isRecaptchaEnabled: boolean = false; isRecaptchaVerificationFailed: boolean = false; isReLoginDueToErrorSavingData: boolean; - isShowGoogleLogin: boolean = true; + protected microsoftAuthenticationEnabled: boolean; passwordError: boolean = false; processing: boolean = false; @ViewChild('recaptchaRef', { static: false }) recaptchaRef: any; + protected showSocialLogin: boolean; constructor( private configService: ConfigService, @@ -33,16 +34,19 @@ export class LoginHomeComponent implements OnInit { ngOnInit(): void { this.configService.getConfig().subscribe((config) => { if (config != null) { - this.isGoogleAuthenticationEnabled = config.googleClientId != ''; + this.googleAuthenticationEnabled = config.googleClientId != ''; + this.microsoftAuthenticationEnabled = config.microsoftClientId != ''; } if (this.userService.isSignedIn()) { this.router.navigateByUrl(this.getRedirectUrl('')); } + this.showSocialLogin = + this.googleAuthenticationEnabled || this.microsoftAuthenticationEnabled; }); this.route.params.subscribe((params) => { if (params['username'] != null) { this.credentials.username = params['username']; - this.isShowGoogleLogin = false; + this.showSocialLogin = false; } }); this.route.queryParams.subscribe((params) => { @@ -97,6 +101,8 @@ export class LoginHomeComponent implements OnInit { let redirectUrl = ''; if (social === 'google') { redirectUrl = `${this.configService.getContextPath()}/api/google-login?redirectUrl=${this.userService.getRedirectUrl()}`; + } else if (social === 'microsoft') { + redirectUrl = `/api/microsoft-login?redirectUrl=/`; } else { redirectUrl = this.userService.getRedirectUrl(); } diff --git a/src/app/register/abstract-register-user.component.ts b/src/app/register/abstract-register-user.component.ts new file mode 100644 index 00000000000..dd03d70719c --- /dev/null +++ b/src/app/register/abstract-register-user.component.ts @@ -0,0 +1,53 @@ +import { Router } from '@angular/router'; +import { UserService } from '../services/user.service'; +import { ConfigService } from '../services/config.service'; +import { Directive, OnInit } from '@angular/core'; +import { GoogleUser } from '../modules/google-sign-in/GoogleUser'; + +@Directive() +export abstract class AbstractRegisterUserComponent implements OnInit { + protected googleAuthenticationEnabled: boolean = false; + protected abstract joinFormPath: string; + protected microsoftAuthenticationEnabled: boolean = false; + + constructor( + private configService: ConfigService, + private router: Router, + private userService: UserService + ) {} + + ngOnInit(): void { + this.configService.getConfig().subscribe((config) => { + if (config != null) { + this.googleAuthenticationEnabled = this.isSet(config.googleClientId); + this.microsoftAuthenticationEnabled = this.isSet(config.microsoftClientId); + } + }); + } + + private isSet(value: string): boolean { + return value != null && value != ''; + } + + protected googleSignIn(credential: GoogleUser): void { + this.userService.isGoogleIdExists(credential.sub).subscribe((isExists) => { + if (isExists) { + this.router.navigate(['join/googleUserAlreadyExists']); + } else { + this.router.navigate([this.joinFormPath, this.getGoogleFormParams(credential)]); + } + }); + } + + protected signUp(): void { + this.router.navigate([this.joinFormPath, this.getFormParams()]); + } + + protected microsoftSignIn(): void { + window.location.href = `/api/microsoft-login?redirectUrl=${this.joinFormPath}`; + } + + protected abstract getFormParams(): any; + + protected abstract getGoogleFormParams(credential: GoogleUser): any; +} diff --git a/src/app/register/register-google-user-already-exists/register-google-user-already-exists.component.html b/src/app/register/register-google-user-already-exists/register-google-user-already-exists.component.html index efb1f191db8..e65b59ec4ef 100644 --- a/src/app/register/register-google-user-already-exists/register-google-user-already-exists.component.html +++ b/src/app/register/register-google-user-already-exists/register-google-user-already-exists.component.html @@ -2,7 +2,7 @@

Create Account

Hi! This Google user already has a WISE account.

- + + +
+ diff --git a/src/app/register/register-microsoft-user-already-exists/register-microsoft-user-already-exists.component.spec.ts b/src/app/register/register-microsoft-user-already-exists/register-microsoft-user-already-exists.component.spec.ts new file mode 100644 index 00000000000..b1acdfb7593 --- /dev/null +++ b/src/app/register/register-microsoft-user-already-exists/register-microsoft-user-already-exists.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { RegisterMicrosoftUserAlreadyExistsComponent } from './register-microsoft-user-already-exists.component'; +import { MatCardModule } from '@angular/material/card'; + +describe('RegisterMicrosoftUserAlreadyExistsComponent', () => { + let component: RegisterMicrosoftUserAlreadyExistsComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [RegisterMicrosoftUserAlreadyExistsComponent], + imports: [MatCardModule] + }); + fixture = TestBed.createComponent(RegisterMicrosoftUserAlreadyExistsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/register/register-microsoft-user-already-exists/register-microsoft-user-already-exists.component.ts b/src/app/register/register-microsoft-user-already-exists/register-microsoft-user-already-exists.component.ts new file mode 100644 index 00000000000..0d804ce7e8d --- /dev/null +++ b/src/app/register/register-microsoft-user-already-exists/register-microsoft-user-already-exists.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + templateUrl: './register-microsoft-user-already-exists.component.html' +}) +export class RegisterMicrosoftUserAlreadyExistsComponent { + protected login(): void { + window.location.href = `/api/microsoft-login?redirectUrl=/`; + } +} diff --git a/src/app/register/register-routing.module.ts b/src/app/register/register-routing.module.ts index cf29240769f..2b157aba6f8 100644 --- a/src/app/register/register-routing.module.ts +++ b/src/app/register/register-routing.module.ts @@ -10,6 +10,7 @@ import { RegisterTeacherFormComponent } from './register-teacher-form/register-t import { RegisterTeacherCompleteComponent } from './register-teacher-complete/register-teacher-complete.component'; import { RegisterStudentComponent } from './register-student/register-student.component'; import { RegisterGoogleUserAlreadyExistsComponent } from './register-google-user-already-exists/register-google-user-already-exists.component'; +import { RegisterMicrosoftUserAlreadyExistsComponent } from './register-microsoft-user-already-exists/register-microsoft-user-already-exists.component'; const registerRoutes: Routes = [ { @@ -23,7 +24,8 @@ const registerRoutes: Routes = [ { path: 'teacher', component: RegisterTeacherComponent }, { path: 'teacher/complete', component: RegisterTeacherCompleteComponent }, { path: 'teacher/form', component: RegisterTeacherFormComponent }, - { path: 'googleUserAlreadyExists', component: RegisterGoogleUserAlreadyExistsComponent } + { path: 'googleUserAlreadyExists', component: RegisterGoogleUserAlreadyExistsComponent }, + { path: 'microsoftUserAlreadyExists', component: RegisterMicrosoftUserAlreadyExistsComponent } ] } ]; diff --git a/src/app/register/register-student-complete/register-student-complete.component.html b/src/app/register/register-student-complete/register-student-complete.component.html index 1babadc8939..95d206afcd4 100644 --- a/src/app/register/register-student-complete/register-student-complete.component.html +++ b/src/app/register/register-student-complete/register-student-complete.component.html @@ -1,15 +1,15 @@

Your WISE account has been created!

-

+

Your username is: {{ username }}.

-

+

Please write this down. You will need it when signing in to WISE in the future.

- Sign In to Get Started Your WISE account has been created!Sign in with Google +

diff --git a/src/app/register/register-student-form/register-student-form.component.html b/src/app/register/register-student-form/register-student-form.component.html index 15415ac3044..5f37430309e 100644 --- a/src/app/register/register-student-form/register-student-form.component.html +++ b/src/app/register/register-student-form/register-student-form.component.html @@ -93,7 +93,7 @@

Create Student Account

>

-
+

Security Question @@ -130,7 +130,10 @@

Create Student Account

-
+
{ this.user.googleUserId = params['gID']; - if (!this.isUsingGoogleId()) { + this.user.microsoftUserId = params['mID']; + if (!this.isSocialAccount()) { this.createStudentAccountFormGroup.addControl('passwords', this.passwordsFormGroup); this.createStudentAccountFormGroup.addControl( 'securityQuestion', @@ -99,10 +100,18 @@ export class RegisterStudentFormComponent extends RegisterUserFormComponent impl this.changeDetectorRef.detectChanges(); } + private isSocialAccount(): boolean { + return this.isUsingGoogleId() || this.isUsingMicrosoftId(); + } + isUsingGoogleId() { return this.user.googleUserId != null; } + private isUsingMicrosoftId(): boolean { + return this.user.microsoftUserId != null; + } + async createAccount() { if (this.createStudentAccountFormGroup.valid) { this.processing = true; @@ -121,7 +130,11 @@ export class RegisterStudentFormComponent extends RegisterUserFormComponent impl createAccountSuccess(response: any): void { this.router.navigate([ 'join/student/complete', - { username: response.username, isUsingGoogleId: this.isUsingGoogleId() } + { + username: response.username, + isUsingGoogleId: this.isUsingGoogleId(), + isUsingMicrosoftId: this.isUsingMicrosoftId() + } ]); this.processing = false; } @@ -138,10 +151,11 @@ export class RegisterStudentFormComponent extends RegisterUserFormComponent impl const token = await this.recaptchaV3Service.execute('importantAction').toPromise(); this.user['token'] = token; } - if (!this.isUsingGoogleId()) { + if (!this.isSocialAccount()) { this.user['password'] = this.getPassword(); delete this.user['passwords']; delete this.user['googleUserId']; + delete this.user['microsoftUserId']; } } diff --git a/src/app/register/register-student/register-student.component.html b/src/app/register/register-student/register-student.component.html index 134d9b2e636..06924c17306 100644 --- a/src/app/register/register-student/register-student.component.html +++ b/src/app/register/register-student/register-student.component.html @@ -18,12 +18,28 @@

Create Student Account

Sign Up

- +

- or -

- +

-
+

+ +

+ diff --git a/src/app/register/register-student/register-student.component.ts b/src/app/register/register-student/register-student.component.ts index 8d2955d7979..9a85a6bc34b 100644 --- a/src/app/register/register-student/register-student.component.ts +++ b/src/app/register/register-student/register-student.component.ts @@ -1,47 +1,22 @@ -import { Component, OnInit } from '@angular/core'; -import { Router } from '@angular/router'; -import { UserService } from '../../services/user.service'; -import { ConfigService } from '../../services/config.service'; +import { Component } from '@angular/core'; import { GoogleUser } from '../../modules/google-sign-in/GoogleUser'; +import { AbstractRegisterUserComponent } from '../abstract-register-user.component'; @Component({ selector: 'app-register-student', templateUrl: './register-student.component.html', styleUrls: ['./register-student.component.scss'] }) -export class RegisterStudentComponent implements OnInit { - firstName: string = ''; - lastName: string = ''; - isGoogleAuthenticationEnabled: boolean = false; +export class RegisterStudentComponent extends AbstractRegisterUserComponent { + protected firstName: string = ''; + protected joinFormPath: string = '/join/student/form'; + protected lastName: string = ''; - constructor( - private configService: ConfigService, - private router: Router, - private userService: UserService - ) {} - - ngOnInit(): void { - this.configService.getConfig().subscribe((config) => { - if (config != null) { - this.isGoogleAuthenticationEnabled = config.googleClientId != null; - } - }); - } - - public signUp(): void { - this.router.navigate([ - 'join/student/form', - { firstName: this.firstName, lastName: this.lastName } - ]); + protected getFormParams(): any { + return { firstName: this.firstName, lastName: this.lastName }; } - public googleSignIn(credential: GoogleUser): void { - this.userService.isGoogleIdExists(credential.sub).subscribe((isExists) => { - if (isExists) { - this.router.navigate(['join/googleUserAlreadyExists']); - } else { - this.router.navigate(['join/student/form', { gID: credential.sub, name: credential.name }]); - } - }); + protected getGoogleFormParams(credential: GoogleUser): any { + return { gID: credential.sub, name: credential.name }; } } diff --git a/src/app/register/register-teacher-complete/register-teacher-complete.component.html b/src/app/register/register-teacher-complete/register-teacher-complete.component.html index 4c9af227829..d2734c369b2 100644 --- a/src/app/register/register-teacher-complete/register-teacher-complete.component.html +++ b/src/app/register/register-teacher-complete/register-teacher-complete.component.html @@ -1,13 +1,13 @@

Your WISE account has been created!

-

+

Your username is: {{ username }}.

You should receive an email with your account details shortly.

- Sign In to Get Started Your WISE account has been created!Sign in with Google +

diff --git a/src/app/register/register-teacher-form/register-teacher-form.component.html b/src/app/register/register-teacher-form/register-teacher-form.component.html index 467a5d2a797..0a300b5c236 100644 --- a/src/app/register/register-teacher-form/register-teacher-form.component.html +++ b/src/app/register/register-teacher-form/register-teacher-form.component.html @@ -141,7 +141,10 @@

Create Teacher Account

/>

-
+
{ this.user.googleUserId = params['gID']; - if (!this.isUsingGoogleId()) { + this.user.microsoftUserId = params['mID']; + if (!this.isSocialAccount()) { this.createTeacherAccountFormGroup.addControl('passwords', this.passwordsFormGroup); } const name = params['name']; @@ -73,10 +74,18 @@ export class RegisterTeacherFormComponent extends RegisterUserFormComponent impl this.changeDetectorRef.detectChanges(); } + private isSocialAccount(): boolean { + return this.isUsingGoogleId() || this.isUsingMicrosoftId(); + } + private isUsingGoogleId(): boolean { return this.user.googleUserId != null; } + private isUsingMicrosoftId(): boolean { + return this.user.microsoftUserId != null; + } + private setControlFieldValue(name: string, value: string): void { this.createTeacherAccountFormGroup.controls[name].setValue(value); } @@ -100,7 +109,11 @@ export class RegisterTeacherFormComponent extends RegisterUserFormComponent impl private createAccountSuccess(response: any): void { this.router.navigate([ 'join/teacher/complete', - { username: response.username, isUsingGoogleId: this.isUsingGoogleId() } + { + username: response.username, + isUsingGoogleId: this.isUsingGoogleId(), + isUsingMicrosoftId: this.isUsingMicrosoftId() + } ]); this.processing = false; } @@ -113,10 +126,11 @@ export class RegisterTeacherFormComponent extends RegisterUserFormComponent impl const token = await this.recaptchaV3Service.execute('importantAction').toPromise(); this.user['token'] = token; } - if (!this.isUsingGoogleId()) { + if (!this.isSocialAccount()) { this.user['password'] = this.getPassword(); delete this.user['passwords']; delete this.user['googleUserId']; + delete this.user['microsoftUserId']; } } diff --git a/src/app/register/register-teacher/register-teacher.component.html b/src/app/register/register-teacher/register-teacher.component.html index b3692bfebc6..29c073652d6 100644 --- a/src/app/register/register-teacher/register-teacher.component.html +++ b/src/app/register/register-teacher/register-teacher.component.html @@ -12,12 +12,28 @@

Create Teacher Account

Sign Up

- +

- or -

- +

-
+

+ +

+ diff --git a/src/app/register/register-teacher/register-teacher.component.ts b/src/app/register/register-teacher/register-teacher.component.ts index 37fd47f8c09..d85dedbe35e 100644 --- a/src/app/register/register-teacher/register-teacher.component.ts +++ b/src/app/register/register-teacher/register-teacher.component.ts @@ -1,46 +1,21 @@ -import { Component, OnInit } from '@angular/core'; -import { Router } from '@angular/router'; -import { UserService } from '../../services/user.service'; -import { ConfigService } from '../../services/config.service'; +import { Component } from '@angular/core'; import { GoogleUser } from '../../modules/google-sign-in/GoogleUser'; +import { AbstractRegisterUserComponent } from '../abstract-register-user.component'; @Component({ selector: 'app-register-teacher', templateUrl: './register-teacher.component.html', styleUrls: ['./register-teacher.component.scss'] }) -export class RegisterTeacherComponent implements OnInit { - email: string = ''; - isGoogleAuthenticationEnabled: boolean = false; +export class RegisterTeacherComponent extends AbstractRegisterUserComponent { + protected email: string = ''; + protected joinFormPath: string = '/join/teacher/form'; - constructor( - private configService: ConfigService, - private router: Router, - private userService: UserService - ) {} - - ngOnInit() { - this.configService.getConfig().subscribe((config) => { - if (config != null) { - this.isGoogleAuthenticationEnabled = config.googleClientId != null; - } - }); - } - - public signUp() { - this.router.navigate(['join/teacher/form', { email: this.email }]); + protected getFormParams(): any { + return { email: this.email }; } - public googleSignIn(credential: GoogleUser): void { - this.userService.isGoogleIdExists(credential.sub).subscribe((isExists) => { - if (isExists) { - this.router.navigate(['join/googleUserAlreadyExists']); - } else { - this.router.navigate([ - 'join/teacher/form', - { gID: credential.sub, name: credential.name, email: credential.email } - ]); - } - }); + protected getGoogleFormParams(credential: GoogleUser): any { + return { gID: credential.sub, name: credential.name, email: credential.email }; } } diff --git a/src/app/register/register-user-complete.component.ts b/src/app/register/register-user-complete.component.ts index 393d4e09a1a..32713669010 100644 --- a/src/app/register/register-user-complete.component.ts +++ b/src/app/register/register-user-complete.component.ts @@ -7,7 +7,10 @@ import { ConfigService } from '../services/config.service'; }) export abstract class RegisterUserCompleteComponent implements OnInit { protected googleLogInURL = `${this.configService.getContextPath()}/api/google-login`; + protected microsoftLogInURL = `${this.configService.getContextPath()}/api/microsoft-login?redirectUrl=/`; + protected socialAccount: boolean; protected isUsingGoogleId: boolean; + protected isUsingMicrosoftId: boolean; protected username: string; constructor( @@ -17,9 +20,11 @@ export abstract class RegisterUserCompleteComponent implements OnInit { ) {} ngOnInit(): void { - this.route.params.subscribe(({ username, isUsingGoogleId }) => { + this.route.params.subscribe(({ username, isUsingGoogleId, isUsingMicrosoftId }) => { this.username = username; this.isUsingGoogleId = isUsingGoogleId === 'true'; + this.isUsingMicrosoftId = isUsingMicrosoftId === 'true'; + this.socialAccount = this.isUsingGoogleId || this.isUsingMicrosoftId; }); } diff --git a/src/app/register/register.module.ts b/src/app/register/register.module.ts index 2650356bfc2..022ed0c1527 100644 --- a/src/app/register/register.module.ts +++ b/src/app/register/register.module.ts @@ -22,6 +22,7 @@ import { MatProgressBarModule } from '@angular/material/progress-bar'; import { MatSelectModule } from '@angular/material/select'; import { GoogleSignInModule } from '../modules/google-sign-in/google-sign-in.module'; import { PasswordModule } from '../password/password.module'; +import { RegisterMicrosoftUserAlreadyExistsComponent } from './register-microsoft-user-already-exists/register-microsoft-user-already-exists.component'; const materialModules = [ MatButtonModule, @@ -54,7 +55,8 @@ const materialModules = [ RegisterStudentFormComponent, RegisterStudentCompleteComponent, RegisterStudentComponent, - RegisterGoogleUserAlreadyExistsComponent + RegisterGoogleUserAlreadyExistsComponent, + RegisterMicrosoftUserAlreadyExistsComponent ], exports: [RegisterComponent] }) diff --git a/src/assets/img/icons/ms-logo.svg b/src/assets/img/icons/ms-logo.svg new file mode 100644 index 00000000000..1f739764834 --- /dev/null +++ b/src/assets/img/icons/ms-logo.svg @@ -0,0 +1 @@ +MS-SymbolLockup \ No newline at end of file diff --git a/src/messages.xlf b/src/messages.xlf index a5fefe8ae19..f952e1cd361 100644 --- a/src/messages.xlf +++ b/src/messages.xlf @@ -2008,7 +2008,7 @@ Click "Cancel" to keep the invalid JSON open so you can fix it. src/app/register/register-home/register-home.component.html - 27 + 30 @@ -2110,11 +2110,11 @@ Click "Cancel" to keep the invalid JSON open so you can fix it. src/app/register/register-student-form/register-student-form.component.html - 152 + 155 src/app/register/register-teacher-form/register-teacher-form.component.html - 175 + 178 @@ -2538,7 +2538,7 @@ Click "Cancel" to keep the invalid JSON open so you can fix it. src/app/register/register-home/register-home.component.html - 17 + 20 @@ -2672,11 +2672,11 @@ Click "Cancel" to keep the invalid JSON open so you can fix it. src/app/register/register-student-form/register-student-form.component.html - 145,149 + 148,152 src/app/register/register-teacher-form/register-teacher-form.component.html - 168,172 + 171,175 @@ -4991,18 +4991,37 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.21 + + Sign in with Microsoft + + src/app/login/login-home/login-home.component.html + 84 + + + src/app/register/register-microsoft-user-already-exists/register-microsoft-user-already-exists.component.html + 16 + + + src/app/register/register-student-complete/register-student-complete.component.html + 34 + + + src/app/register/register-teacher-complete/register-teacher-complete.component.html + 32 + + Forgot username or password? src/app/login/login-home/login-home.component.html - 80 + 91 New to WISE? Join for free! src/app/login/login-home/login-home.component.html - 81,82 + 92,93 @@ -5038,13 +5057,17 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.src/app/register/register-google-user-already-exists/register-google-user-already-exists.component.html 3 + + src/app/register/register-microsoft-user-already-exists/register-microsoft-user-already-exists.component.html + 6 + src/app/register/register-student-form/register-student-form.component.html - 164 + 167 src/app/register/register-teacher-form/register-teacher-form.component.html - 187 + 190 @@ -6964,25 +6987,54 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.2,4 + + Sorry, your Microsoft User ID was not found in WISE. + + src/app/register/register-home/register-home.component.html + 5,7 + + Create WISE Account src/app/register/register-home/register-home.component.html - 5 + 8 Students can view and complete WISE lessons offered by teachers. src/app/register/register-home/register-home.component.html - 19 + 22 Teachers can select, author, and run WISE lessons with their students. src/app/register/register-home/register-home.component.html - 29 + 32 + + + + Hi! This Microsoft user already has a WISE account. + + src/app/register/register-microsoft-user-already-exists/register-microsoft-user-already-exists.component.html + 7 + + + + Microsoft logo + + src/app/register/register-microsoft-user-already-exists/register-microsoft-user-already-exists.component.html + 15 + + + src/app/register/register-student-complete/register-student-complete.component.html + 33 + + + src/app/register/register-teacher-complete/register-teacher-complete.component.html + 31 @@ -7093,18 +7145,18 @@ Click "Cancel" to keep the invalid JSON open so you can fix it. By clicking "Create Account", you agree to our Privacy Policy & Terms of Use. src/app/register/register-student-form/register-student-form.component.html - 141,144 + 144,147   src/app/register/register-student-form/register-student-form.component.html - 154 + 157 src/app/register/register-teacher-form/register-teacher-form.component.html - 177 + 180 @@ -7139,6 +7191,17 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.12 + + Sign up with Microsoft + + src/app/register/register-student/register-student.component.html + 40 + + + src/app/register/register-teacher/register-teacher.component.html + 34 + + You should receive an email with your account details shortly. @@ -7292,14 +7355,14 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.I agree to the WISE Privacy Policy & Terms of Use * src/app/register/register-teacher-form/register-teacher-form.component.html - 156,158 + 159,161 You must agree to the Privacy Policy & Terms of Use src/app/register/register-teacher-form/register-teacher-form.component.html - 164 + 167 diff --git a/src/style/components/_buttons.scss b/src/style/components/_buttons.scss index dac1c5f963d..ac847603860 100644 --- a/src/style/components/_buttons.scss +++ b/src/style/components/_buttons.scss @@ -48,14 +48,31 @@ img { width: 16px; height: auto; - margin: 0 16px 0 -14px; + margin-left: -16px; padding: 8px; - background-color: #fff; - border-radius: 2px; } } .button--google { background-color: #1a73e8 !important; - text-transform: none; + text-transform: none !important; + + img { + background-color: #ffffff; + border-radius: 2px; + margin: 0 16px 0 -14px; + } +} + +.button--microsoft { + background-color: #2f2f2f !important; + color: #ffffff; + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif !important; + font-weight: 600 !important; + text-transform: none !important; + border-radius: 0 !important; + + img { + margin: 0 4px 0 -12px; + } }