MOBILE-3565 login: Fix some styles of credentials page

main
Dani Palou 2020-10-27 15:05:11 +01:00
parent 996f1c6ae3
commit 7e2436e7ca
7 changed files with 56 additions and 44 deletions

View File

@ -21,4 +21,8 @@
max-width: 300px;
margin: 5px auto;
}
.core-login-forgotten-password {
text-decoration: underline;
}
}

View File

@ -14,16 +14,16 @@
</ion-buttons>
</ion-toolbar>
</ion-header>
<ion-content padding>
<ion-content>
<core-loading [hideUntil]="pageLoaded">
<div text-wrap text-center margin-bottom>
<div class="ion-text-wrap ion-text-center ion-margin-bottom">
<div class="core-login-site-logo">
<!-- Show site logo or a default image. -->
<img *ngIf="logoUrl" [src]="logoUrl" role="presentation" onError="this.src='assets/img/login_logo.png'">
<img *ngIf="!logoUrl" src="assets/img/login_logo.png" role="presentation">
</div>
<h3 *ngIf="siteName" padding class="core-sitename"><core-format-text [text]="siteName" [filter]="false"></core-format-text></h3>
<h3 *ngIf="siteName" class="ion-padding core-sitename"><core-format-text [text]="siteName" [filter]="false"></core-format-text></h3>
<p class="core-siteurl">{{siteUrl}}</p>
</div>
@ -31,48 +31,50 @@
<ion-item *ngIf="siteChecked && !isBrowserSSO">
<ion-input type="text" name="username" placeholder="{{ 'core.login.username' | translate }}" formControlName="username" autocapitalize="none" autocorrect="off"></ion-input>
</ion-item>
<ion-item *ngIf="siteChecked && !isBrowserSSO" margin-bottom>
<core-show-password item-content [name]="'password'">
<ion-item *ngIf="siteChecked && !isBrowserSSO" class="ion-margin-bottom">
<core-show-password [name]="'password'">
<ion-input class="core-ioninput-password" name="password" type="password" placeholder="{{ 'core.login.password' | translate }}" formControlName="password" core-show-password [clearOnEdit]="false"></ion-input>
</core-show-password>
</ion-item>
<div padding>
<ion-button block type="submit" [disabled]="siteChecked && !isBrowserSSO && !credForm.valid" class="core-login-login-button">{{ 'core.login.loginbutton' | translate }}</ion-button>
<input type="submit" className="core-submit-enter" /> <!-- Remove this once Ionic fixes this bug: https://github.com/ionic-team/ionic-framework/issues/19368 -->
</div>
<ion-button expand="block" type="submit" [disabled]="siteChecked && !isBrowserSSO && !credForm.valid" class="ion-margin core-login-login-button">{{ 'core.login.loginbutton' | translate }}</ion-button>
<input type="submit" class="core-submit-hidden-enter" /> <!-- Remove this once Ionic fixes this bug: https://github.com/ionic-team/ionic-framework/issues/19368 -->
<ng-container *ngIf="showScanQR">
<div class="core-login-site-qrcode-separator">{{ 'core.login.or' | translate }}</div>
<ion-item class="core-login-site-qrcode" no-lines>
<ion-button block color="light" margin-top icon-start text-wrap (click)="showInstructionsAndScanQR()">
<ion-icon name="fa-qrcode" aria-hidden="true"></ion-icon>
{{ 'core.scanqr' | translate }}
</ion-button>
</ion-item>
<div class="ion-text-center ion-padding">{{ 'core.login.or' | translate }}</div>
<ion-button expand="block" color="light" class="ion-margin" lines="none" (click)="showInstructionsAndScanQR()">
<ion-icon slot="start" name="fa-qrcode" aria-hidden="true"></ion-icon>
<ion-label>{{ 'core.scanqr' | translate }}</ion-label>
</ion-button>
</ng-container>
</form>
<!-- Forgotten password button. -->
<ion-list no-lines *ngIf="showForgottenPassword" class="core-login-forgotten-password">
<ion-item text-center text-wrap (click)="forgottenPassword()" detail-none>
{{ 'core.login.forgotten' | translate }}
<!-- Forgotten password option. -->
<ion-list lines="none" *ngIf="showForgottenPassword" class="core-login-forgotten-password ion-no-padding">
<ion-item button class="ion-text-center ion-text-wrap" (click)="forgottenPassword()" detail="false">
<ion-label>{{ 'core.login.forgotten' | translate }}</ion-label>
</ion-item>
</ion-list>
<ion-list *ngIf="identityProviders && identityProviders.length" padding-top class="core-login-identity-providers">
<ion-item text-wrap no-lines><h3 class="item-heading">{{ 'core.login.potentialidps' | translate }}</h3></ion-item>
<ion-item *ngFor="let provider of identityProviders" text-wrap class="core-oauth-icon" (click)="oauthClicked(provider)" title="{{provider.name}}">
<img [src]="provider.iconurl" alt="" width="32" height="32" item-start>
{{provider.name}}
<ion-list *ngIf="identityProviders && identityProviders.length" class="ion-padding-top core-login-identity-providers">
<ion-item class="ion-text-wrap" lines="none">
<ion-label><h3 class="item-heading">{{ 'core.login.potentialidps' | translate }}</h3></ion-label>
</ion-item>
<ion-item button *ngFor="let provider of identityProviders" class="ion-text-wrap core-oauth-icon" (click)="oauthClicked(provider)" title="{{provider.name}}">
<img [src]="provider.iconurl" alt="" width="32" height="32" slot="start">
<ion-label>{{provider.name}}</ion-label>
</ion-item>
</ion-list>
<ion-list *ngIf="canSignup" padding-top class="core-login-sign-up">
<ion-item text-wrap no-lines><h3 class="item-heading">{{ 'core.login.firsttime' | translate }}</h3></ion-item>
<ion-item no-lines text-wrap *ngIf="authInstructions">
<p><core-format-text [text]="authInstructions" [filter]="false"></core-format-text></p>
<ion-list *ngIf="canSignup" class="ion-padding-top core-login-sign-up">
<ion-item class="ion-text-wrap" lines="none">
<ion-label><h3 class="item-heading">{{ 'core.login.firsttime' | translate }}</h3></ion-label>
</ion-item>
<ion-button block color="light" (onClick)="signup()">{{ 'core.login.startsignup' | translate }}</ion-button>
<ion-item class="ion-text-wrap" lines="none" *ngIf="authInstructions">
<ion-label><p><core-format-text [text]="authInstructions" [filter]="false"></core-format-text></p></ion-label>
</ion-item>
<ion-button expand="block" class="ion-margin" color="light" (onClick)="signup()">
{{ 'core.login.startsignup' | translate }}
</ion-button>
</ion-list>
</core-loading>
</ion-content>

View File

@ -33,6 +33,7 @@ import { CoreEvents } from '@singletons/events';
@Component({
selector: 'page-core-login-credentials',
templateUrl: 'credentials.html',
styleUrls: ['../../login.scss'],
})
export class CoreLoginCredentialsPage implements OnInit, OnDestroy {

View File

@ -42,7 +42,7 @@
<h2 class="item-heading">{{ 'core.login.selectsite' | translate }}</h2>
</ion-label>
</ion-item>
<ion-item *ngIf="enteredSiteUrl" (click)="connect($event, enteredSiteUrl.url)" [attr.aria-label]="'core.login.connect' | translate" detail-push class="core-login-entered-site">
<ion-item button *ngIf="enteredSiteUrl" (click)="connect($event, enteredSiteUrl.url)" [attr.aria-label]="'core.login.connect' | translate" detail-push class="core-login-entered-site">
<ion-thumbnail slot="start">
<ion-icon name="fa-pencil-alt"></ion-icon>
</ion-thumbnail>
@ -57,7 +57,7 @@
<ion-spinner></ion-spinner>
</div>
<ng-container *ngFor="let site of sites">
<ng-container *ngTemplateOutlet="site"></ng-container>
<ng-container *ngTemplateOutlet="site; context: {site: site}"></ng-container>
</ng-container>
</div>
</ion-list>
@ -88,26 +88,24 @@
</ng-container>
<ng-container *ngIf="showScanQR && !hasSites && !enteredSiteUrl">
<div class="core-login-site-qrcode-separator">{{ 'core.login.or' | translate }}</div>
<ion-item class="core-login-site-qrcode" lines="none">
<ion-button expand="block" class="ion-margin-top ion-text-wrap" (click)="showInstructionsAndScanQR()">
<ion-icon name="fa-qrcode" aria-hidden="true" slot="start"></ion-icon>
{{ 'core.scanqr' | translate }}
</ion-button>
</ion-item>
<div class="ion-text-center ion-padding ion-margin-top">{{ 'core.login.or' | translate }}</div>
<ion-button expand="block" color="light" class="ion-margin" lines="none" (click)="showInstructionsAndScanQR()">
<ion-icon slot="start" name="fa-qrcode" aria-hidden="true"></ion-icon>
<ion-label>{{ 'core.scanqr' | translate }}</ion-label>
</ion-button>
</ng-container>
<!-- Help. -->
<ion-list lines="none" class="ion-margin-top">
<ion-item class="ion-text-center ion-text-wrap core-login-need-help" (click)="showHelp()" detail="false">
<ion-item button class="ion-text-center ion-text-wrap core-login-need-help" (click)="showHelp()" detail="false">
<ion-label>{{ 'core.needhelp' | translate }}</ion-label>
</ion-item>
</ion-list>
</ion-content>
<!-- Template site selector. -->
<ng-template #site>
<ion-item (click)="connect($event, site.url, site)" [title]="site.name" detail>
<ng-template #site let-site="site">
<ion-item button (click)="connect($event, site.url, site)" [title]="site.name" detail>
<ion-thumbnail *ngIf="siteFinderSettings.displayimage" slot="start">
<img [src]="site.imageurl" *ngIf="site.imageurl" onError="this.src='assets/icon/icon.png'">
<img src="assets/icon/icon.png" *ngIf="!site.imageurl" class="core-login-default-icon">

View File

@ -19,7 +19,7 @@
</ion-header>
<ion-content>
<ion-list>
<ion-item (click)="login(site.id)" *ngFor="let site of sites">
<ion-item button (click)="login(site.id)" *ngFor="let site of sites">
<ion-avatar slot="start">
<img [src]="site.avatar" core-external-content [siteId]="site.id" alt="{{ 'core.pictureof' | translate:{$a: site.fullName} }}" role="presentation" onError="this.src='assets/img/user-avatar.png'">
</ion-avatar>

View File

@ -98,7 +98,7 @@ export class CoreMainMenuProvider {
const id = url + '#' + type;
if (!icon) {
// Icon not defined, use default one.
icon = type == 'embedded' ? 'fa-square-o' : 'fa-link'; // @todo: Find a better icon for embedded.
icon = type == 'embedded' ? 'fa-expand' : 'fa-link'; // @todo: Find a better icon for embedded.
}
if (!map[id]) {

View File

@ -83,3 +83,10 @@ ion-list.list-md {
.core-modal-force-on-top {
z-index: 100000 !important;
}
// Hidden submit button.
.core-submit-hidden-enter {
position: absolute;
visibility: hidden;
left: -1000px;
}