|
14 | 14 | <div text-center padding margin-bottom [class.hidden]="hasSites || enteredSiteUrl" class="core-login-site-logo"> |
15 | 15 | <img src="assets/img/login_logo.png" class="avatar-full login-logo" role="presentation"> |
16 | 16 | </div> |
17 | | - <form ion-list [formGroup]="siteForm" (ngSubmit)="connect($event, siteForm.value.siteUrl)" *ngIf="!fixedSites || fixedDisplay == 'select'" #siteFormEl> |
| 17 | + <form ion-list [formGroup]="siteForm" (ngSubmit)="connect($event, siteForm.value.siteUrl)" *ngIf="!fixedSites || siteSelector == 'select'" #siteFormEl> |
18 | 18 | <!-- Form to input the site URL if there are no fixed sites. --> |
19 | 19 | <ng-container *ngIf="!fixedSites"> |
20 | | - <ion-item> |
21 | | - <ion-label stacked><h2>{{ 'core.login.siteaddress' | translate }}</h2></ion-label> |
22 | | - <ion-input name="url" placeholder="https://campus.example.edu" formControlName="siteUrl" [core-auto-focus]="showKeyboard" (ionChange)="searchSite($event, siteForm.value.siteUrl)"></ion-input> |
23 | | - </ion-item> |
24 | | - </ng-container> |
| 20 | + <ng-container *ngIf="siteSelector == 'url'"> |
| 21 | + <ion-item> |
| 22 | + <ion-label stacked><h2>{{ 'core.login.siteaddress' | translate }}</h2></ion-label> |
| 23 | + <ion-input name="url" type="url" placeholder="https://campus.example.edu" formControlName="siteUrl" [core-auto-focus]="showKeyboard"></ion-input> |
| 24 | + </ion-item> |
| 25 | + </ng-container> |
| 26 | + <ng-container *ngIf="siteSelector != 'url'"> |
| 27 | + <ion-item> |
| 28 | + <ion-label stacked><h2>{{ 'core.login.siteaddress' | translate }}</h2></ion-label> |
| 29 | + <ion-input name="url" placeholder="https://campus.example.edu" formControlName="siteUrl" [core-auto-focus]="showKeyboard" (ionChange)="searchSite($event, siteForm.value.siteUrl)"></ion-input> |
| 30 | + </ion-item> |
25 | 31 |
|
26 | | - <ion-list *ngIf="!fixedSites" [class.hidden]="!hasSites && !enteredSiteUrl" class="core-login-site-list"> |
27 | | - <ion-item no-lines class="core-login-site-list-title"><h2 class="item-heading">{{ 'core.login.selectsite' | translate }}</h2></ion-item> |
28 | | - <button ion-item *ngIf="enteredSiteUrl" (click)="connect($event, enteredSiteUrl.url)" [attr.aria-label]="'core.login.connect' | translate" detail-push class="core-login-entered-site"> |
29 | | - <ion-thumbnail item-start> |
30 | | - <core-icon name="fa-pencil"></core-icon> |
31 | | - </ion-thumbnail> |
32 | | - <h2 text-wrap>{{ 'core.login.yourenteredsite' | translate }}</h2> |
33 | | - <p>{{enteredSiteUrl.noProtocolUrl}}</p> |
34 | | - </button> |
| 32 | + <ion-list [class.hidden]="!hasSites && !enteredSiteUrl" class="core-login-site-list"> |
| 33 | + <ion-item no-lines class="core-login-site-list-title"><h2 class="item-heading">{{ 'core.login.selectsite' | translate }}</h2></ion-item> |
| 34 | + <button ion-item *ngIf="enteredSiteUrl" (click)="connect($event, enteredSiteUrl.url)" [attr.aria-label]="'core.login.connect' | translate" detail-push class="core-login-entered-site"> |
| 35 | + <ion-thumbnail item-start> |
| 36 | + <core-icon name="fa-pencil"></core-icon> |
| 37 | + </ion-thumbnail> |
| 38 | + <h2 text-wrap>{{ 'core.login.yourenteredsite' | translate }}</h2> |
| 39 | + <p>{{enteredSiteUrl.noProtocolUrl}}</p> |
| 40 | + </button> |
35 | 41 |
|
36 | | - <div class="core-login-site-list-found" [class.hidden]="!hasSites" [class.dimmed]="loadingSites"> |
37 | | - <div *ngIf="loadingSites" class="core-login-site-list-loading"><ion-spinner></ion-spinner></div> |
38 | | - <button ion-item *ngFor="let site of sites" (click)="connect($event, site.url, site)" [attr.aria-label]="site.name" detail-push> |
39 | | - <ion-thumbnail item-start> |
40 | | - <img [src]="site.imageurl" *ngIf="site.imageurl" onError="this.src='assets/icon/icon.png'"> |
41 | | - <img src="assets/icon/icon.png" *ngIf="!site.imageurl" class="core-login-default-icon"> |
42 | | - </ion-thumbnail> |
43 | | - <h2 text-wrap>{{site.name}}<ng-container *ngIf="site.alias"> ({{site.alias}})</ng-container></h2> |
44 | | - <p>{{site.noProtocolUrl}}</p> |
45 | | - <p *ngIf="site.country || site.city" text-wrap><ng-container *ngIf="site.city">{{site.city}} - </ng-container>{{site.country}}</p> |
46 | | - </button> |
47 | | - </div> |
48 | | - </ion-list> |
| 42 | + <div class="core-login-site-list-found" [class.hidden]="!hasSites" [class.dimmed]="loadingSites"> |
| 43 | + <div *ngIf="loadingSites" class="core-login-site-list-loading"><ion-spinner></ion-spinner></div> |
| 44 | + <button ion-item *ngFor="let site of sites" (click)="connect($event, site.url, site)" [attr.aria-label]="site.name" detail-push> |
| 45 | + <ion-thumbnail item-start> |
| 46 | + <img [src]="site.imageurl" *ngIf="site.imageurl" onError="this.src='assets/icon/icon.png'"> |
| 47 | + <img src="assets/icon/icon.png" *ngIf="!site.imageurl" class="core-login-default-icon"> |
| 48 | + </ion-thumbnail> |
| 49 | + <h2 text-wrap>{{site.name}}<ng-container *ngIf="site.alias"> ({{site.alias}})</ng-container></h2> |
| 50 | + <p>{{site.noProtocolUrl}}</p> |
| 51 | + <p *ngIf="site.country || site.city" text-wrap><ng-container *ngIf="site.city">{{site.city}} - </ng-container>{{site.country}}</p> |
| 52 | + </button> |
| 53 | + </div> |
| 54 | + </ion-list> |
49 | 55 |
|
50 | | - <div *ngIf="!fixedSites && !hasSites && loadingSites" class="core-login-site-nolist-loading"><ion-spinner></ion-spinner></div> |
| 56 | + <div *ngIf="!hasSites && loadingSites" class="core-login-site-nolist-loading"><ion-spinner></ion-spinner></div> |
| 57 | + </ng-container> |
| 58 | + </ng-container> |
51 | 59 |
|
52 | 60 | <!-- Pick the site from a list of fixed sites. --> |
53 | | - <ion-item *ngIf="fixedSites && fixedDisplay == 'select'" margin-vertical text-wrap> |
| 61 | + <ion-item *ngIf="fixedSites && siteSelector == 'select'" margin-vertical text-wrap> |
54 | 62 | <ion-label stacked for="siteSelect">{{ 'core.login.selectsite' | translate }}</ion-label> |
55 | 63 | <ion-select formControlName="siteUrl" name="url" placeholder="{{ 'core.login.siteaddress' | translate }}" interface="action-sheet"> |
56 | 64 | <ion-option *ngFor="let site of fixedSites" [value]="site.url">{{site.name}}</ion-option> |
57 | 65 | </ion-select> |
58 | 66 | </ion-item> |
| 67 | + |
| 68 | + <button *ngIf="(fixedSites && siteSelector == 'select') || (!fixedSites && siteSelector == 'url')" ion-button block [disabled]="!siteForm.valid">{{ 'core.login.connect' | translate }}</button> |
59 | 69 | </form> |
60 | 70 |
|
61 | | - <!-- Pick the site from a list of fixed sites. --> |
62 | | - <ion-list *ngIf="fixedSites && (fixedDisplay == 'list' || fixedDisplay == 'listnourl')"> |
63 | | - <ion-item no-lines><h2 class="item-heading">{{ 'core.login.selectsite' | translate }}</h2></ion-item> |
64 | | - <ion-searchbar *ngIf="fixedSites.length > 4" [(ngModel)]="filter" (ionInput)="filterChanged($event)" (ionCancel)="filterChanged()" [placeholder]="'core.login.findyoursite' | translate"></ion-searchbar> |
65 | | - <ion-item *ngFor="let site of filteredSites" (click)="connect($event, site.url)" [title]="site.name" detail-push text-wrap> |
66 | | - <h2>{{site.name}}</h2> |
67 | | - <p *ngIf="fixedDisplay == 'list'">{{site.url}}</p> |
68 | | - </ion-item> |
69 | | - </ion-list> |
| 71 | + <ng-container *ngIf="fixedSites"> |
| 72 | + <!-- Pick the site from a list of fixed sites. --> |
| 73 | + <ion-list *ngIf="siteSelector == 'list' || siteSelector == 'listnourl'"> |
| 74 | + <ion-item no-lines><h2 class="item-heading">{{ 'core.login.selectsite' | translate }}</h2></ion-item> |
| 75 | + <ion-searchbar *ngIf="fixedSites.length > 4" [(ngModel)]="filter" (ionInput)="filterChanged($event)" (ionCancel)="filterChanged()" [placeholder]="'core.login.findyoursite' | translate"></ion-searchbar> |
| 76 | + <ion-item *ngFor="let site of filteredSites" (click)="connect($event, site.url)" [title]="site.name" detail-push text-wrap> |
| 77 | + <h2>{{site.name}}</h2> |
| 78 | + <p *ngIf="siteSelector == 'list'">{{site.url}}</p> |
| 79 | + </ion-item> |
| 80 | + </ion-list> |
70 | 81 |
|
71 | | - <!-- Display them using buttons. --> |
72 | | - <div *ngIf="fixedSites && fixedDisplay == 'buttons'"> |
73 | | - <p class="padding no-padding-bottom">{{ 'core.login.selectsite' | translate }}</p> |
74 | | - <a *ngFor="let site of fixedSites" ion-button block (click)="connect($event, site.url)" [title]="site.name" margin-bottom>{{site.name}}</a> |
75 | | - </div> |
| 82 | + <!-- Display them using buttons. --> |
| 83 | + <div *ngIf="siteSelector == 'buttons'"> |
| 84 | + <p class="padding no-padding-bottom">{{ 'core.login.selectsite' | translate }}</p> |
| 85 | + <a *ngFor="let site of fixedSites" ion-button block (click)="connect($event, site.url)" [title]="site.name" margin-bottom>{{site.name}}</a> |
| 86 | + </div> |
| 87 | + </ng-container> |
76 | 88 |
|
77 | 89 | <ng-container *ngIf="showScanQR && !hasSites && !enteredSiteUrl"> |
78 | 90 | <div class="core-login-site-qrcode-separator">{{ 'core.login.or' | translate }}</div> |
|
0 commit comments