MOBILE-3833 a11y: Add missing lists

This is still not completely accessible, but it is a good idea to use lists properly in case https://github.com/ionic-team/ionic-framework/issues/19939 gets solved
main
Noel De Martin 2021-09-08 17:43:59 +02:00
parent 255f3048a2
commit 5396bb6a71
6 changed files with 312 additions and 301 deletions

View File

@ -10,33 +10,35 @@
</ion-header> </ion-header>
<ion-content> <ion-content>
<ion-item class="ion-text-wrap"> <ion-list>
<ion-label><h2>{{ appName }} {{ versionName }}</h2></ion-label> <ion-item class="ion-text-wrap">
</ion-item> <ion-label><h2>{{ appName }} {{ versionName }}</h2></ion-label>
<ion-item button class="ion-text-wrap" (click)="openPage('deviceinfo')" detail="true"> </ion-item>
<ion-icon name="fas-mobile" slot="start" aria-hidden="true"></ion-icon> <ion-item button class="ion-text-wrap" (click)="openPage('deviceinfo')" detail="true">
<ion-label>{{ 'core.settings.deviceinfo' | translate }}</ion-label> <ion-icon name="fas-mobile" slot="start" aria-hidden="true"></ion-icon>
</ion-item> <ion-label>{{ 'core.settings.deviceinfo' | translate }}</ion-label>
<ion-item button class="ion-text-wrap" (click)="openPage('licenses')" detail="true"> </ion-item>
<ion-icon name="far-copyright" slot="start" aria-hidden="true"></ion-icon> <ion-item button class="ion-text-wrap" (click)="openPage('licenses')" detail="true">
<ion-label>{{ 'core.settings.opensourcelicenses' | translate }}</ion-label> <ion-icon name="far-copyright" slot="start" aria-hidden="true"></ion-icon>
</ion-item> <ion-label>{{ 'core.settings.opensourcelicenses' | translate }}</ion-label>
<ion-item </ion-item>
*ngIf="privacyPolicy" <ion-item
class="ion-text-wrap" *ngIf="privacyPolicy"
button core-link auto-login="no" [href]="privacyPolicy" class="ion-text-wrap"
detail="true" detailIcon="open-outline" button core-link auto-login="no" [href]="privacyPolicy"
> detail="true" detailIcon="open-outline"
<ion-icon name="fas-user-shield" slot="start" aria-hidden="true"></ion-icon> >
<ion-label>{{ 'core.settings.privacypolicy' | translate }}</ion-label> <ion-icon name="fas-user-shield" slot="start" aria-hidden="true"></ion-icon>
</ion-item> <ion-label>{{ 'core.settings.privacypolicy' | translate }}</ion-label>
<ion-item </ion-item>
*ngIf="feedbackFormUrl" <ion-item
class="ion-text-wrap" *ngIf="feedbackFormUrl"
button core-link [href]="feedbackFormUrl" class="ion-text-wrap"
detail="true" detailIcon="open-outline" button core-link [href]="feedbackFormUrl"
> detail="true" detailIcon="open-outline"
<ion-icon name="fas-bullhorn" slot="start" aria-hidden="true"></ion-icon> >
<ion-label>{{ 'core.settings.helpusimprove' | translate }}</ion-label> <ion-icon name="fas-bullhorn" slot="start" aria-hidden="true"></ion-icon>
</ion-item> <ion-label>{{ 'core.settings.helpusimprove' | translate }}</ion-label>
</ion-item>
</ion-list>
</ion-content> </ion-content>

View File

@ -15,128 +15,130 @@
</ion-header> </ion-header>
<ion-content> <ion-content>
<ion-item (longPress)="copyItemInfo($event)"> <ion-list>
<ion-label class="ion-text-wrap"> <ion-item (longPress)="copyItemInfo($event)">
<h2>{{ 'core.settings.appversion' | translate}}</h2> <ion-label class="ion-text-wrap">
<p>{{ deviceInfo.versionName }} ({{ deviceInfo.versionCode }})</p> <h2>{{ 'core.settings.appversion' | translate}}</h2>
</ion-label> <p>{{ deviceInfo.versionName }} ({{ deviceInfo.versionCode }})</p>
</ion-item> </ion-label>
<ion-item (longPress)="copyItemInfo($event)"> </ion-item>
<ion-label class="ion-text-wrap"> <ion-item (longPress)="copyItemInfo($event)">
<h2>{{ 'core.settings.compilationinfo' | translate }}</h2> <ion-label class="ion-text-wrap">
<p *ngIf="deviceInfo.compilationTime">{{ deviceInfo.compilationTime | coreFormatDate: "LLL Z": false }}</p> <h2>{{ 'core.settings.compilationinfo' | translate }}</h2>
<p *ngIf="deviceInfo.lastCommit">{{ deviceInfo.lastCommit }}</p> <p *ngIf="deviceInfo.compilationTime">{{ deviceInfo.compilationTime | coreFormatDate: "LLL Z": false }}</p>
</ion-label> <p *ngIf="deviceInfo.lastCommit">{{ deviceInfo.lastCommit }}</p>
</ion-item> </ion-label>
<ion-item *ngIf="deviceInfo.siteUrl" (longPress)="copyItemInfo($event)"> </ion-item>
<ion-label class="ion-text-wrap"> <ion-item *ngIf="deviceInfo.siteUrl" (longPress)="copyItemInfo($event)">
<h2>{{ 'core.settings.siteinfo' | translate }}<ng-container *ngIf="deviceInfo.isPrefixedUrl"> *</ng-container></h2> <ion-label class="ion-text-wrap">
<p><a [href]="deviceInfo.siteUrl" core-link auto-login="yes">{{ deviceInfo.siteUrl }}</a></p> <h2>{{ 'core.settings.siteinfo' | translate }}<ng-container *ngIf="deviceInfo.isPrefixedUrl"> *</ng-container></h2>
<p *ngIf="deviceInfo.siteVersion">{{ deviceInfo.siteVersion }}</p> <p><a [href]="deviceInfo.siteUrl" core-link auto-login="yes">{{ deviceInfo.siteUrl }}</a></p>
<p *ngIf="deviceInfo.siteId">{{ deviceInfo.siteId }}</p> <p *ngIf="deviceInfo.siteVersion">{{ deviceInfo.siteVersion }}</p>
</ion-label> <p *ngIf="deviceInfo.siteId">{{ deviceInfo.siteId }}</p>
</ion-item> </ion-label>
<ion-item *ngIf="deviceInfo.fileSystemRoot" (longPress)="copyItemInfo($event)"> </ion-item>
<ion-label class="ion-text-wrap"> <ion-item *ngIf="deviceInfo.fileSystemRoot" (longPress)="copyItemInfo($event)">
<h2>{{ 'core.settings.filesystemroot' | translate }}</h2> <ion-label class="ion-text-wrap">
<p><a *ngIf="fsClickable" [href]="deviceInfo.fileSystemRoot" core-link auto-login="no">{{ deviceInfo.fileSystemRoot }}</a></p> <h2>{{ 'core.settings.filesystemroot' | translate }}</h2>
<p *ngIf="!fsClickable">{{ deviceInfo.fileSystemRoot }}</p> <p><a *ngIf="fsClickable" [href]="deviceInfo.fileSystemRoot" core-link auto-login="no">{{ deviceInfo.fileSystemRoot }}</a></p>
</ion-label> <p *ngIf="!fsClickable">{{ deviceInfo.fileSystemRoot }}</p>
</ion-item> </ion-label>
<ion-item *ngIf="deviceInfo.userAgent" (longPress)="copyItemInfo($event)"> </ion-item>
<ion-label class="ion-text-wrap"> <ion-item *ngIf="deviceInfo.userAgent" (longPress)="copyItemInfo($event)">
<h2>{{ 'core.settings.navigatoruseragent' | translate }}</h2> <ion-label class="ion-text-wrap">
<p>{{ deviceInfo.userAgent }}</p> <h2>{{ 'core.settings.navigatoruseragent' | translate }}</h2>
</ion-label> <p>{{ deviceInfo.userAgent }}</p>
</ion-item> </ion-label>
<ion-item *ngIf="deviceInfo.browserLanguage" (longPress)="copyItemInfo($event)"> </ion-item>
<ion-label class="ion-text-wrap"> <ion-item *ngIf="deviceInfo.browserLanguage" (longPress)="copyItemInfo($event)">
<h2>{{ 'core.settings.navigatorlanguage' | translate }}</h2> <ion-label class="ion-text-wrap">
<p>{{ deviceInfo.browserLanguage }}</p> <h2>{{ 'core.settings.navigatorlanguage' | translate }}</h2>
</ion-label> <p>{{ deviceInfo.browserLanguage }}</p>
</ion-item> </ion-label>
<ion-item *ngIf="deviceInfo.currentLanguage" (longPress)="copyItemInfo($event)"> </ion-item>
<ion-label class="ion-text-wrap"> <ion-item *ngIf="deviceInfo.currentLanguage" (longPress)="copyItemInfo($event)">
<h2>{{ 'core.settings.currentlanguage' | translate }}</h2> <ion-label class="ion-text-wrap">
<p>{{ currentLangName }} ({{ deviceInfo.currentLanguage }})</p> <h2>{{ 'core.settings.currentlanguage' | translate }}</h2>
</ion-label> <p>{{ currentLangName }} ({{ deviceInfo.currentLanguage }})</p>
</ion-item> </ion-label>
<ion-item *ngIf="deviceInfo.locationHref" (longPress)="copyItemInfo($event)"> </ion-item>
<ion-label class="ion-text-wrap"> <ion-item *ngIf="deviceInfo.locationHref" (longPress)="copyItemInfo($event)">
<h2>{{ 'core.settings.locationhref' | translate }}</h2> <ion-label class="ion-text-wrap">
<p>{{ deviceInfo.locationHref }}</p> <h2>{{ 'core.settings.locationhref' | translate }}</h2>
</ion-label> <p>{{ deviceInfo.locationHref }}</p>
</ion-item> </ion-label>
<ion-item *ngIf="deviceInfo.deviceType" (longPress)="copyItemInfo($event)"> </ion-item>
<ion-label class="ion-text-wrap"> <ion-item *ngIf="deviceInfo.deviceType" (longPress)="copyItemInfo($event)">
<h2>{{ 'core.settings.displayformat' | translate }}</h2> <ion-label class="ion-text-wrap">
<p>{{ 'core.' + deviceInfo.deviceType | translate }}</p> <h2>{{ 'core.settings.displayformat' | translate }}</h2>
</ion-label> <p>{{ 'core.' + deviceInfo.deviceType | translate }}</p>
</ion-item> </ion-label>
<ion-item *ngIf="deviceInfo.deviceOs && deviceOsTranslated" (longPress)="copyItemInfo($event)"> </ion-item>
<ion-label class="ion-text-wrap"> <ion-item *ngIf="deviceInfo.deviceOs && deviceOsTranslated" (longPress)="copyItemInfo($event)">
<h2>{{ 'core.settings.deviceos' | translate}}</h2> <ion-label class="ion-text-wrap">
<p>{{ deviceOsTranslated }}</p> <h2>{{ 'core.settings.deviceos' | translate}}</h2>
</ion-label> <p>{{ deviceOsTranslated }}</p>
</ion-item> </ion-label>
<ion-item *ngIf="deviceInfo.screen" (longPress)="copyItemInfo($event)"> </ion-item>
<ion-label class="ion-text-wrap"> <ion-item *ngIf="deviceInfo.screen" (longPress)="copyItemInfo($event)">
<h2>{{ 'core.settings.screen' | translate }}</h2> <ion-label class="ion-text-wrap">
<p>{{ deviceInfo.screen }}</p> <h2>{{ 'core.settings.screen' | translate }}</h2>
</ion-label> <p>{{ deviceInfo.screen }}</p>
</ion-item> </ion-label>
<ion-item (longPress)="copyItemInfo($event)"> </ion-item>
<ion-label class="ion-text-wrap"> <ion-item (longPress)="copyItemInfo($event)">
<h2>{{ 'core.settings.networkstatus' | translate}}</h2> <ion-label class="ion-text-wrap">
<p>{{ 'core.' + deviceInfo.networkStatus | translate }}</p> <h2>{{ 'core.settings.networkstatus' | translate}}</h2>
</ion-label> <p>{{ 'core.' + deviceInfo.networkStatus | translate }}</p>
</ion-item> </ion-label>
<ion-item (longPress)="copyItemInfo($event)"> </ion-item>
<ion-label class="ion-text-wrap"> <ion-item (longPress)="copyItemInfo($event)">
<h2>{{ 'core.settings.wificonnection' | translate}}</h2> <ion-label class="ion-text-wrap">
<p>{{ 'core.' + deviceInfo.wifiConnection | translate }}</p> <h2>{{ 'core.settings.wificonnection' | translate}}</h2>
</ion-label> <p>{{ 'core.' + deviceInfo.wifiConnection | translate }}</p>
</ion-item> </ion-label>
<ion-item *ngIf="deviceInfo.cordovaVersion" (longPress)="copyItemInfo($event)"> </ion-item>
<ion-label class="ion-text-wrap"> <ion-item *ngIf="deviceInfo.cordovaVersion" (longPress)="copyItemInfo($event)">
<h2>{{ 'core.settings.cordovaversion' | translate }}</h2> <ion-label class="ion-text-wrap">
<p>{{ deviceInfo.cordovaVersion }}</p> <h2>{{ 'core.settings.cordovaversion' | translate }}</h2>
</ion-label> <p>{{ deviceInfo.cordovaVersion }}</p>
</ion-item> </ion-label>
<ion-item *ngIf="deviceInfo.platform" (longPress)="copyItemInfo($event)"> </ion-item>
<ion-label class="ion-text-wrap"> <ion-item *ngIf="deviceInfo.platform" (longPress)="copyItemInfo($event)">
<h2>{{ 'core.settings.cordovadeviceplatform' | translate }}</h2> <ion-label class="ion-text-wrap">
<p>{{ deviceInfo.platform }}</p> <h2>{{ 'core.settings.cordovadeviceplatform' | translate }}</h2>
</ion-label> <p>{{ deviceInfo.platform }}</p>
</ion-item> </ion-label>
<ion-item *ngIf="deviceInfo.osVersion" (longPress)="copyItemInfo($event)"> </ion-item>
<ion-label class="ion-text-wrap"> <ion-item *ngIf="deviceInfo.osVersion" (longPress)="copyItemInfo($event)">
<h2>{{ 'core.settings.cordovadeviceosversion' | translate }}</h2> <ion-label class="ion-text-wrap">
<p>{{ deviceInfo.osVersion }}</p> <h2>{{ 'core.settings.cordovadeviceosversion' | translate }}</h2>
</ion-label> <p>{{ deviceInfo.osVersion }}</p>
</ion-item> </ion-label>
<ion-item *ngIf="deviceInfo.model" (longPress)="copyItemInfo($event)"> </ion-item>
<ion-label class="ion-text-wrap"> <ion-item *ngIf="deviceInfo.model" (longPress)="copyItemInfo($event)">
<h2>{{ 'core.settings.cordovadevicemodel' | translate}}</h2> <ion-label class="ion-text-wrap">
<p>{{ deviceInfo.model }}</p> <h2>{{ 'core.settings.cordovadevicemodel' | translate}}</h2>
</ion-label> <p>{{ deviceInfo.model }}</p>
</ion-item> </ion-label>
<ion-item *ngIf="deviceInfo.uuid" (longPress)="copyItemInfo($event)"> </ion-item>
<ion-label class="ion-text-wrap"> <ion-item *ngIf="deviceInfo.uuid" (longPress)="copyItemInfo($event)">
<h2>{{ 'core.settings.cordovadeviceuuid' | translate}}</h2> <ion-label class="ion-text-wrap">
<p>{{ deviceInfo.uuid }}</p> <h2>{{ 'core.settings.cordovadeviceuuid' | translate}}</h2>
</ion-label> <p>{{ deviceInfo.uuid }}</p>
</ion-item> </ion-label>
<ion-item *ngIf="deviceInfo.pushId" (longPress)="copyItemInfo($event)"> </ion-item>
<ion-label class="ion-text-wrap"> <ion-item *ngIf="deviceInfo.pushId" (longPress)="copyItemInfo($event)">
<h2>{{ 'core.settings.pushid' | translate }}</h2> <ion-label class="ion-text-wrap">
<p>{{ deviceInfo.pushId }}</p> <h2>{{ 'core.settings.pushid' | translate }}</h2>
</ion-label> <p>{{ deviceInfo.pushId }}</p>
</ion-item> </ion-label>
<ion-item (longPress)="copyItemInfo($event)"> </ion-item>
<ion-label class="ion-text-wrap"> <ion-item (longPress)="copyItemInfo($event)">
<h2>{{ 'core.settings.localnotifavailable' | translate }}</h2> <ion-label class="ion-text-wrap">
<p>{{ 'core.' + deviceInfo.localNotifAvailable | translate }}</p> <h2>{{ 'core.settings.localnotifavailable' | translate }}</h2>
</ion-label> <p>{{ 'core.' + deviceInfo.localNotifAvailable | translate }}</p>
</ion-item> </ion-label>
</ion-item>
</ion-list>
</ion-content> </ion-content>

View File

@ -8,73 +8,75 @@
</ion-toolbar> </ion-toolbar>
</ion-header> </ion-header>
<ion-content> <ion-content>
<ion-item class="ion-text-wrap"> <ion-list>
<ion-label> <ion-item class="ion-text-wrap">
<h2>{{ 'core.settings.language' | translate }}</h2> <ion-label>
</ion-label> <h2>{{ 'core.settings.language' | translate }}</h2>
<ion-select [(ngModel)]="selectedLanguage" (ionChange)="languageChanged()" interface="action-sheet" </ion-label>
[interfaceOptions]="{header: 'core.settings.language' | translate}"> <ion-select [(ngModel)]="selectedLanguage" (ionChange)="languageChanged()" interface="action-sheet"
<ion-select-option *ngFor="let entry of languages" [value]="entry.code">{{ entry.name }}</ion-select-option> [interfaceOptions]="{header: 'core.settings.language' | translate}">
</ion-select> <ion-select-option *ngFor="let entry of languages" [value]="entry.code">{{ entry.name }}</ion-select-option>
</ion-item> </ion-select>
<ion-item class="ion-text-wrap core-settings-general-font-size item-interactive"> </ion-item>
<ion-label> <ion-item class="ion-text-wrap core-settings-general-font-size item-interactive">
<h2>{{ 'core.settings.fontsize' | translate }}</h2> <ion-label>
</ion-label> <h2>{{ 'core.settings.fontsize' | translate }}</h2>
<ion-segment [(ngModel)]="selectedZoomLevel" (ionChange)="zoomLevelChanged()" color="primary"> </ion-label>
<ion-segment-button *ngFor="let zoomLevel of zoomLevels" [value]="zoomLevel.value" <ion-segment [(ngModel)]="selectedZoomLevel" (ionChange)="zoomLevelChanged()" color="primary">
[ngStyle]="{'font-size.px': zoomLevel.style}"> <ion-segment-button *ngFor="let zoomLevel of zoomLevels" [value]="zoomLevel.value"
<ion-label> [ngStyle]="{'font-size.px': zoomLevel.style}">
{{ 'core.settings.fontsizecharacter' | translate }} <ion-label>
<!-- Empty element styled with the largest font size, so all buttons share a common baseline. --> {{ 'core.settings.fontsizecharacter' | translate }}
<span [ngStyle]="{'font-size.px': zoomLevels[zoomLevels.length - 1].style}"></span> <!-- Empty element styled with the largest font size, so all buttons share a common baseline. -->
</ion-label> <span [ngStyle]="{'font-size.px': zoomLevels[zoomLevels.length - 1].style}"></span>
</ion-segment-button> </ion-label>
</ion-segment> </ion-segment-button>
</ion-item> </ion-segment>
<ion-item class="ion-text-wrap core-settings-general-color-scheme" *ngIf="colorSchemes.length > 0" </ion-item>
[lines]="selectedScheme=='system' && isAndroid ? 'none' : 'inset'"> <ion-item class="ion-text-wrap core-settings-general-color-scheme" *ngIf="colorSchemes.length > 0"
<ion-label> [lines]="selectedScheme=='system' && isAndroid ? 'none' : 'inset'">
<h2>{{ 'core.settings.colorscheme' | translate }}</h2> <ion-label>
<p *ngIf="colorSchemeDisabled" class="text-danger">{{ 'core.settings.forcedsetting' | translate }}</p> <h2>{{ 'core.settings.colorscheme' | translate }}</h2>
</ion-label> <p *ngIf="colorSchemeDisabled" class="text-danger">{{ 'core.settings.forcedsetting' | translate }}</p>
<ion-select [(ngModel)]="selectedScheme" (ionChange)="colorSchemeChanged()" interface="action-sheet" </ion-label>
[disabled]="colorSchemeDisabled" [interfaceOptions]="{header: 'core.settings.colorscheme' | translate}"> <ion-select [(ngModel)]="selectedScheme" (ionChange)="colorSchemeChanged()" interface="action-sheet"
<ion-select-option *ngFor="let scheme of colorSchemes" [value]="scheme"> [disabled]="colorSchemeDisabled" [interfaceOptions]="{header: 'core.settings.colorscheme' | translate}">
{{ 'core.settings.colorscheme-' + scheme | translate }}</ion-select-option> <ion-select-option *ngFor="let scheme of colorSchemes" [value]="scheme">
</ion-select> {{ 'core.settings.colorscheme-' + scheme | translate }}</ion-select-option>
</ion-item> </ion-select>
<ion-item text-wrap *ngIf="colorSchemes.length > 0 && selectedScheme=='system' && isAndroid"> </ion-item>
<ion-label><p>{{ 'core.settings.colorscheme-system-notice' | translate }}</p></ion-label> <ion-item text-wrap *ngIf="colorSchemes.length > 0 && selectedScheme=='system' && isAndroid">
</ion-item> <ion-label><p>{{ 'core.settings.colorscheme-system-notice' | translate }}</p></ion-label>
<ion-item class="ion-text-wrap"> </ion-item>
<ion-label> <ion-item class="ion-text-wrap">
<h2>{{ 'core.settings.enablerichtexteditor' | translate }}</h2> <ion-label>
<p>{{ 'core.settings.enablerichtexteditordescription' | translate }}</p> <h2>{{ 'core.settings.enablerichtexteditor' | translate }}</h2>
</ion-label> <p>{{ 'core.settings.enablerichtexteditordescription' | translate }}</p>
<ion-toggle [(ngModel)]="richTextEditor" (ionChange)="richTextEditorChanged()"></ion-toggle> </ion-label>
</ion-item> <ion-toggle [(ngModel)]="richTextEditor" (ionChange)="richTextEditorChanged()"></ion-toggle>
<ion-item class="ion-text-wrap" *ngIf="displayIframeHelp"> </ion-item>
<ion-label> <ion-item class="ion-text-wrap" *ngIf="displayIframeHelp">
<h2>{{ 'core.settings.ioscookies' | translate }}</h2> <ion-label>
<p>{{ 'core.settings.ioscookiesdescription' | translate }}</p> <h2>{{ 'core.settings.ioscookies' | translate }}</h2>
<ion-button expand="block" (click)="openNativeSettings()"> <p>{{ 'core.settings.ioscookiesdescription' | translate }}</p>
{{ 'core.opensettings' | translate }} <ion-button expand="block" (click)="openNativeSettings()">
</ion-button> {{ 'core.opensettings' | translate }}
</ion-label> </ion-button>
</ion-item> </ion-label>
<ion-item class="ion-text-wrap"> </ion-item>
<ion-label> <ion-item class="ion-text-wrap">
<h2>{{ 'core.settings.debugdisplay' | translate }}</h2> <ion-label>
<p>{{ 'core.settings.debugdisplaydescription' | translate }}</p> <h2>{{ 'core.settings.debugdisplay' | translate }}</h2>
</ion-label> <p>{{ 'core.settings.debugdisplaydescription' | translate }}</p>
<ion-toggle [(ngModel)]="debugDisplay" (ionChange)="debugDisplayChanged()"></ion-toggle> </ion-label>
</ion-item> <ion-toggle [(ngModel)]="debugDisplay" (ionChange)="debugDisplayChanged()"></ion-toggle>
<ion-item class="ion-text-wrap" *ngIf="analyticsSupported"> </ion-item>
<ion-label> <ion-item class="ion-text-wrap" *ngIf="analyticsSupported">
<h2>{{ 'core.settings.enablefirebaseanalytics' | translate }}</h2> <ion-label>
<p>{{ 'core.settings.enablefirebaseanalyticsdescription' | translate }}</p> <h2>{{ 'core.settings.enablefirebaseanalytics' | translate }}</h2>
</ion-label> <p>{{ 'core.settings.enablefirebaseanalyticsdescription' | translate }}</p>
<ion-toggle [(ngModel)]="analyticsEnabled" (ionChange)="analyticsEnabledChanged()"></ion-toggle> </ion-label>
</ion-item> <ion-toggle [(ngModel)]="analyticsEnabled" (ionChange)="analyticsEnabledChanged()"></ion-toggle>
</ion-item>
</ion-list>
</ion-content> </ion-content>

View File

@ -9,33 +9,34 @@
</ion-header> </ion-header>
<ion-content> <ion-content>
<core-loading [hideUntil]="loaded"> <core-loading [hideUntil]="loaded">
<ion-item button *ngIf="error" class="ion-text-wrap" [href]="licensesUrl" core-link auto-login="no"> <ion-list>
<ion-label> <ion-item button *ngIf="error" class="ion-text-wrap" [href]="licensesUrl" core-link auto-login="no">
{{ 'core.settings.opensourcelicenses' | translate }}
</ion-label>
<ion-button [href]="licensesUrl" target="_blank" fill="clear" slot="end" core-link auto-login="no">
{{ 'core.view' | translate }}</ion-button>
</ion-item>
<ng-container *ngIf="!error">
<ion-item *ngFor="let license of licenses" class="ion-text-wrap">
<ion-label> <ion-label>
<p class="item-heading"> {{ 'core.settings.opensourcelicenses' | translate }}
<a *ngIf="license.repository" [href]="license.repository" core-link
auto-login="no">{{ license.name }}</a>
<ng-container *ngIf="!license.repository">{{ license.name }}</ng-container> - {{ license.version }}
</p>
<p class="item-heading" *ngIf="license.publisher">
{{ 'core.settings.publisher' | translate }}{{ 'core.labelsep' | translate }} {{ license.publisher }}
</p>
<p>{{ 'core.settings.license' | translate }}{{ 'core.labelsep' | translate }} {{ license.licenses }}</p>
<p><a *ngIf="license.url" [href]="license.url" core-link auto-login="no">{{ license.url }}</a></p>
<p><a *ngIf="license.email" [href]="'mailto:' + license.email" core-link
auto-login="no">{{ license.email }}</a></p>
</ion-label> </ion-label>
<ion-button *ngIf="license.licenseUrl" [href]="license.licenseUrl" target="_blank" <ion-button [href]="licensesUrl" target="_blank" fill="clear" slot="end" core-link auto-login="no">
fill="clear" slot="end" core-link auto-login="no">{{ 'core.view' | translate }}</ion-button> {{ 'core.view' | translate }}</ion-button>
</ion-item> </ion-item>
</ng-container> <ng-container *ngIf="!error">
<ion-item *ngFor="let license of licenses" class="ion-text-wrap">
<ion-label>
<p class="item-heading">
<a *ngIf="license.repository" [href]="license.repository" core-link
auto-login="no">{{ license.name }}</a>
<ng-container *ngIf="!license.repository">{{ license.name }}</ng-container> - {{ license.version }}
</p>
<p class="item-heading" *ngIf="license.publisher">
{{ 'core.settings.publisher' | translate }}{{ 'core.labelsep' | translate }} {{ license.publisher }}
</p>
<p>{{ 'core.settings.license' | translate }}{{ 'core.labelsep' | translate }} {{ license.licenses }}</p>
<p><a *ngIf="license.url" [href]="license.url" core-link auto-login="no">{{ license.url }}</a></p>
<p><a *ngIf="license.email" [href]="'mailto:' + license.email" core-link
auto-login="no">{{ license.email }}</a></p>
</ion-label>
<ion-button *ngIf="license.licenseUrl" [href]="license.licenseUrl" target="_blank"
fill="clear" slot="end" core-link auto-login="no">{{ 'core.view' | translate }}</ion-button>
</ion-item>
</ng-container>
</ion-list>
</core-loading> </core-loading>
</ion-content> </ion-content>

View File

@ -18,30 +18,32 @@
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content> <ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
</ion-refresher> </ion-refresher>
<core-loading [hideUntil]="loaded"> <core-loading [hideUntil]="loaded">
<ion-item *ngFor="let site of sites" [attr.aria-current]="site.id == currentSiteId ? 'page' : 'false'"> <ion-list>
<ion-label class="ion-text-wrap"> <ion-item *ngFor="let site of sites" [attr.aria-current]="site.id == currentSiteId ? 'page' : 'false'">
<p class="item-heading"> <ion-label class="ion-text-wrap">
<core-format-text [text]="site.siteName" clean="true" [siteId]="site.id"></core-format-text> <p class="item-heading">
<core-format-text [text]="site.siteName" clean="true" [siteId]="site.id"></core-format-text>
</p>
<p class="ion-text-wrap">{{ site.fullName }}</p>
<p>{{ site.siteUrl }}</p>
</ion-label>
<p *ngIf="site.spaceUsage !== undefined" slot="end">
{{ site.spaceUsage | coreBytesToSize }}
</p> </p>
<p class="ion-text-wrap">{{ site.fullName }}</p> <ion-button fill="clear" color="danger" slot="end" (click)="deleteSiteStorage(site)"
<p>{{ site.siteUrl }}</p> [hidden]="site.spaceUsage! + site.cacheEntries! <= 0"
</ion-label> [attr.aria-label]="'core.settings.deletesitefilestitle' | translate">
<p *ngIf="site.spaceUsage !== undefined" slot="end"> <ion-icon name="fas-trash" slot="icon-only" aria-hidden="true"></ion-icon>
{{ site.spaceUsage | coreBytesToSize }} </ion-button>
</p> </ion-item>
<ion-button fill="clear" color="danger" slot="end" (click)="deleteSiteStorage(site)" <ion-item-divider>
[hidden]="site.spaceUsage! + site.cacheEntries! <= 0" <ion-label>
[attr.aria-label]="'core.settings.deletesitefilestitle' | translate"> <h2>{{ 'core.settings.total' | translate }}</h2>
<ion-icon name="fas-trash" slot="icon-only" aria-hidden="true"></ion-icon> </ion-label>
</ion-button> <p slot="end" class="ion-margin-end">
</ion-item> {{ totals.spaceUsage | coreBytesToSize }}
<ion-item-divider> </p>
<ion-label> </ion-item-divider>
<h2>{{ 'core.settings.total' | translate }}</h2> </ion-list>
</ion-label>
<p slot="end" class="ion-margin-end">
{{ totals.spaceUsage | coreBytesToSize }}
</p>
</ion-item-divider>
</core-loading> </core-loading>
</ion-content> </ion-content>

View File

@ -15,35 +15,37 @@
</ion-header> </ion-header>
<ion-content> <ion-content>
<core-loading [hideUntil]="sitesLoaded"> <core-loading [hideUntil]="sitesLoaded">
<ion-item-divider> <ion-list>
<ion-label> <ion-item-divider>
<h2>{{ 'core.settings.syncsettings' | translate }}</h2> <ion-label>
</ion-label> <h2>{{ 'core.settings.syncsettings' | translate }}</h2>
</ion-item-divider> </ion-label>
<ion-item class="ion-text-wrap"> </ion-item-divider>
<ion-label>{{ 'core.settings.enablesyncwifi' | translate }}</ion-label> <ion-item class="ion-text-wrap">
<ion-toggle slot="end" [(ngModel)]="syncOnlyOnWifi" (ngModelChange)="syncOnlyOnWifiChanged()"> <ion-label>{{ 'core.settings.enablesyncwifi' | translate }}</ion-label>
</ion-toggle> <ion-toggle slot="end" [(ngModel)]="syncOnlyOnWifi" (ngModelChange)="syncOnlyOnWifiChanged()">
</ion-item> </ion-toggle>
<ion-item-divider> </ion-item>
<ion-label> <ion-item-divider>
<h2>{{ 'core.settings.sites' | translate }}</h2> <ion-label>
</ion-label> <h2>{{ 'core.settings.sites' | translate }}</h2>
</ion-item-divider> </ion-label>
<ion-item *ngFor="let site of sites" [attr.aria-current]="site.id == currentSiteId ? 'page' : 'false'" class="ion-text-wrap"> </ion-item-divider>
<ion-label> <ion-item *ngFor="let site of sites" [attr.aria-current]="site.id == currentSiteId ? 'page' : 'false'" class="ion-text-wrap">
<p class="item-heading"> <ion-label>
<core-format-text [text]="site.siteName" clean="true" [siteId]="site.id"></core-format-text> <p class="item-heading">
</p> <core-format-text [text]="site.siteName" clean="true" [siteId]="site.id"></core-format-text>
<p>{{ site.fullName }}</p> </p>
<p>{{ site.siteUrl }}</p> <p>{{ site.fullName }}</p>
</ion-label> <p>{{ site.siteUrl }}</p>
<core-button-with-spinner [loading]="isSynchronizing(site.id)" slot="end"> </ion-label>
<ion-button fill="clear" (click)="synchronize(site.id)" <core-button-with-spinner [loading]="isSynchronizing(site.id)" slot="end">
[title]="site.siteName" [attr.aria-label]="'core.settings.synchronizenow' | translate"> <ion-button fill="clear" (click)="synchronize(site.id)"
<ion-icon name="fas-sync-alt" slot="icon-only" aria-hidden="true"></ion-icon> [title]="site.siteName" [attr.aria-label]="'core.settings.synchronizenow' | translate">
</ion-button> <ion-icon name="fas-sync-alt" slot="icon-only" aria-hidden="true"></ion-icon>
</core-button-with-spinner> </ion-button>
</ion-item> </core-button-with-spinner>
</ion-item>
</ion-list>
</core-loading> </core-loading>
</ion-content> </ion-content>