MOBILE-3814 styles: Ion item without lines by default

main
Pau Ferrer Ocaña 2022-02-09 22:29:21 +01:00
parent e403d2c3ba
commit 7690270766
39 changed files with 109 additions and 100 deletions

View File

@ -1,4 +1,4 @@
<ion-item lines="none" *ngIf="course">
<ion-item *ngIf="course">
<ion-label class="ion-text-wrap">
<h3>
<span class="sr-only">{{ 'core.courses.aria:coursename' | translate }}</span>
@ -7,7 +7,7 @@
</ion-label>
</ion-item>
<ion-item-group *ngFor="let dayEvents of filteredEvents">
<ion-item lines="none">
<ion-item>
<ion-label>
<h4 [class.core-bold]="!course">{{ dayEvents.dayTimestamp * 1000 | coreFormatDate:"strftimedaydate" }}</h4>
</ion-label>
@ -73,7 +73,7 @@
<ion-spinner *ngIf="loadingMore" [attr.aria-label]="'core.loading' | translate"></ion-spinner>
</div>
<ion-item lines="none" *ngIf="empty && course">
<ion-item *ngIf="empty && course">
<ion-label class="ion-text-wrap">
<p>{{'addon.block_timeline.noevents' | translate}}</p>
</ion-label>

View File

@ -27,7 +27,7 @@
</ion-item>
<!-- Custom value. -->
<ion-item lines="none" class="ion-text-wrap">
<ion-item class="ion-text-wrap">
<ion-label>
<p>{{ 'core.custom' | translate }}</p>
</ion-label>

View File

@ -147,7 +147,7 @@
</ion-label>
<ion-radio slot="end" [value]="0"></ion-radio>
</ion-item>
<ion-item lines="none">
<ion-item>
<ion-label>
<p>{{ 'addon.calendar.durationuntil' | translate }}</p>
</ion-label>
@ -159,7 +159,7 @@
[placeholder]="'addon.calendar.durationuntil' | translate" [displayFormat]="dateFormat" display-timezone="utc">
</ion-datetime>
</ion-item>
<ion-item lines="none">
<ion-item>
<ion-label>
<p>{{ 'addon.calendar.durationminutes' | translate }}</p>
</ion-label>
@ -175,7 +175,7 @@
<!-- Repeat (for new events). -->
<ng-container *ngIf="!eventId || eventId < 0">
<ion-item class="ion-text-wrap divider" lines="none">
<ion-item class="ion-text-wrap divider">
<ion-label>
<p class="item-heading">{{ 'addon.calendar.repeatevent' | translate }}</p>
</ion-label>

View File

@ -23,7 +23,7 @@
</ion-card>
<ion-card *ngIf="plan">
<ion-list>
<ion-item class="ion-text-wrap" *ngIf="plan.plan.description" lines="none">
<ion-item class="ion-text-wrap" *ngIf="plan.plan.description">
<ion-label>
<p>
<core-format-text [text]="plan.plan.description" contextLevel="user" [contextInstanceId]="plan.plan.userid">
@ -31,25 +31,25 @@
</p>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" lines="none">
<ion-item class="ion-text-wrap">
<ion-label>
<p class="item-heading">{{ 'addon.competency.status' | translate }}</p>
<p>{{ plan.plan.statusname }}</p>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" *ngIf="plan.plan.duedate > 0" lines="none">
<ion-item class="ion-text-wrap" *ngIf="plan.plan.duedate > 0">
<ion-label>
<p class="item-heading">{{ 'addon.competency.duedate' | translate }}</p>
<p>{{ plan.plan.duedate * 1000 | coreFormatDate }}</p>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" *ngIf="plan.plan.template" lines="none">
<ion-item class="ion-text-wrap" *ngIf="plan.plan.template">
<ion-label>
<p class="item-heading">{{ 'addon.competency.template' | translate }}</p>
<p>{{ plan.plan.template.shortname }}</p>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" lines="none">
<ion-item class="ion-text-wrap">
<ion-label id="addon-competency-plan-{{plan.plan.id}}-progress">
<p class="item-heading">{{ 'addon.competency.progress' | translate }}</p>
<p>

View File

@ -2,7 +2,7 @@
<ion-item class="ion-text-wrap" *ngIf="files && files.length && !edit">
<ion-label>
<h2>{{ plugin.name }}</h2>
<div lines="none">
<div>
<core-files [files]="files" [component]="component" [componentId]="assign.cmid" [alwaysDownload]="true"></core-files>
</div>
</ion-label>

View File

@ -11,7 +11,7 @@
</span>
<ng-container *ngIf="displayMode">
<div lines="none">
<div>
<core-files [files]="files" [component]="component" [componentId]="componentId" [alwaysDownload]="true"></core-files>
</div>
</ng-container>

View File

@ -40,7 +40,7 @@
<!-- Activity info. -->
<core-course-module-info [module]="module" [description]="forum && forum.type != 'single' && description" [component]="component"
[componentId]="componentId" [courseId]="courseId" [hasDataToSync]="hasOffline || hasOfflineRatings">
<ion-item lines="none" class="ion-text-wrap">
<ion-item class="ion-text-wrap">
<ion-label>
{{descriptionNote}}
</ion-label>

View File

@ -1,7 +1,7 @@
<div class="addon-mod_forum-post">
<ng-container *ngIf="!formData.isEditing || !showForm">
<ion-card-header class="ion-text-wrap ion-no-padding" id="addon-mod_forum-post-{{post.id}}">
<ion-item class="ion-text-wrap" [class.highlight]="highlight" lines="none">
<ion-item class="ion-text-wrap" [class.highlight]="highlight">
<ion-label>
<div class="addon-mod-forum-post-title" *ngIf="displaySubject">
<h2 class="ion-text-wrap">
@ -63,13 +63,13 @@
<core-format-text [component]="component" [componentId]="componentId" [text]="post.message" contextLevel="module"
[contextInstanceId]="forum && forum.cmid" [courseId]="courseId">
</core-format-text>
<div lines="none" *ngIf="post.attachments && post.attachments.length > 0">
<div *ngIf="post.attachments && post.attachments.length > 0">
<core-files [files]="post.attachments" [component]="component" [componentId]="componentId" showInline="true">
</core-files>
</div>
</ion-card-content>
<div class="addon-mod-forum-post-more-info">
<ion-item class="ion-text-wrap" *ngIf="tagsEnabled && post.tags && post.tags.length > 0" lines="none">
<ion-item class="ion-text-wrap" *ngIf="tagsEnabled && post.tags && post.tags.length > 0">
<div slot="start">{{ 'core.tag.tags' | translate }}:</div>
<ion-label>
<core-tag-list [tags]="post.tags"></core-tag-list>

View File

@ -46,7 +46,7 @@
</core-format-text>
</ion-label>
</ion-item>
<div *ngIf="entry.attachment" lines="none">
<div *ngIf="entry.attachment">
<core-file *ngFor="let file of entry.attachments" [file]="file" [component]="component" [componentId]="componentId">
</core-file>
</div>

View File

@ -36,13 +36,13 @@
<!-- Attempt summary. -->
<ion-card class="addon-mod_h5pactivity-attempt-result-summary">
<ion-list>
<ion-item class="ion-text-wrap" lines="none">
<ion-item class="ion-text-wrap">
<ion-label>
<h2>{{ 'addon.mod_h5pactivity.startdate' | translate }}</h2>
<p>{{ attempt.timecreated | coreFormatDate:'strftimedatetime' }}</p>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" lines="none">
<ion-item class="ion-text-wrap">
<ion-label>
<h2>{{ 'addon.mod_h5pactivity.completion' | translate }}</h2>
<p *ngIf="attempt.completion">
@ -55,13 +55,13 @@
</p>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" lines="none">
<ion-item class="ion-text-wrap">
<ion-label>
<h2>{{ 'addon.mod_h5pactivity.duration' | translate }}</h2>
<p>{{ attempt.durationReadable }}</p>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" lines="none">
<ion-item class="ion-text-wrap">
<ion-label>
<h2>{{ 'addon.mod_h5pactivity.outcome' | translate }}</h2>
<p *ngIf="attempt.success !== null && attempt.success">
@ -77,7 +77,7 @@
</p>
</ion-label>
</ion-item>
<ion-item *ngIf="attempt.maxscore" class="ion-text-wrap" lines="none">
<ion-item *ngIf="attempt.maxscore" class="ion-text-wrap">
<ion-label>
<h2>{{ 'addon.mod_h5pactivity.totalscore' | translate }}</h2>
<p>{{ 'addon.mod_h5pactivity.score_out_of' | translate:{$a: attempt} }}</p>
@ -151,7 +151,7 @@
</ng-container>
<!-- Result doesn't support tracking. -->
<ion-item class="ion-text-wrap core-warning-item" *ngIf="!result.track" lines="none">
<ion-item class="ion-text-wrap core-warning-item" *ngIf="!result.track">
<ion-icon slot="start" name="fas-exclamation-triangle" color="warning" aria-hidden="true"></ion-icon>
<ion-label>
{{ 'addon.mod_h5pactivity.no_compatible_track' | translate:{$a: result.interactiontype} }}

View File

@ -69,7 +69,7 @@
<ion-list *ngIf="(lesson && !preventReasons.length) || retakeToReview">
<ng-container *ngIf="retakeToReview">
<!-- A retake was finished in a synchronization, allow reviewing it. -->
<ion-item class="ion-text-wrap" lines="none">
<ion-item class="ion-text-wrap">
<ion-label class="ion-padding-bottom">
{{ 'addon.mod_lesson.retakefinishedinsync' | translate }}
</ion-label>

View File

@ -198,34 +198,34 @@
<ion-card-header class="ion-text-wrap" *ngIf="eolData.gradelesson">
<ion-card-title>{{ 'addon.mod_lesson.congratulations' | translate }}</ion-card-title>
</ion-card-header>
<ion-item class="ion-text-wrap" *ngIf="eolData.notenoughtimespent" lines="none">
<ion-item class="ion-text-wrap" *ngIf="eolData.notenoughtimespent">
<ion-label>{{ eolData.notenoughtimespent.message }}</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" *ngIf="eolData.numberofpagesviewed" lines="none">
<ion-item class="ion-text-wrap" *ngIf="eolData.numberofpagesviewed">
<ion-label>{{ eolData.numberofpagesviewed.message }}</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" *ngIf="eolData.youshouldview" lines="none">
<ion-item class="ion-text-wrap" *ngIf="eolData.youshouldview">
<ion-label>{{ eolData.youshouldview.message }}</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" *ngIf="eolData.numberofcorrectanswers" lines="none">
<ion-item class="ion-text-wrap" *ngIf="eolData.numberofcorrectanswers">
<ion-label>{{ eolData.numberofcorrectanswers.message }}</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" *ngIf="eolData.displayscorewithessays" lines="none">
<ion-item class="ion-text-wrap" *ngIf="eolData.displayscorewithessays">
<ion-label [innerHTML]="eolData.displayscorewithessays.message"></ion-label>
</ion-item>
<ion-item class="ion-text-wrap" *ngIf="!eolData.displayscorewithessays && eolData.displayscorewithoutessays" lines="none">
<ion-item class="ion-text-wrap" *ngIf="!eolData.displayscorewithessays && eolData.displayscorewithoutessays">
<ion-label>{{ eolData.displayscorewithoutessays.message }}</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" *ngIf="eolData.yourcurrentgradeisoutof" lines="none">
<ion-item class="ion-text-wrap" *ngIf="eolData.yourcurrentgradeisoutof">
<ion-label>{{ eolData.yourcurrentgradeisoutof.message }}</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" *ngIf="eolData.eolstudentoutoftimenoanswers" lines="none">
<ion-item class="ion-text-wrap" *ngIf="eolData.eolstudentoutoftimenoanswers">
<ion-label>{{ eolData.eolstudentoutoftimenoanswers.message }}</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" *ngIf="eolData.welldone" lines="none">
<ion-item class="ion-text-wrap" *ngIf="eolData.welldone">
<ion-label>{{ eolData.welldone.message }}</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" *ngIf="lesson.progressbar && eolData.progresscompleted" lines="none">
<ion-item class="ion-text-wrap" *ngIf="lesson.progressbar && eolData.progresscompleted">
<ion-label>
<span id="addon-mod_lesson-{{cmId}}-progress-end">
{{ 'addon.mod_lesson.progresscompleted' | translate:{$a: eolData.progresscompleted.value} }}
@ -235,14 +235,14 @@
</core-progress-bar>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" *ngIf="eolData.displayofgrade" lines="none">
<ion-item class="ion-text-wrap" *ngIf="eolData.displayofgrade">
<ion-label>{{ eolData.displayofgrade.message }}</ion-label>
</ion-item>
<ion-button *ngIf="eolData.reviewlesson" expand="block" class="ion-text-wrap ion-margin button-no-uppercase"
(click)="reviewLesson(reviewPageId!)">
{{ 'addon.mod_lesson.reviewlesson' | translate }}
</ion-button>
<ion-item class="ion-text-wrap" *ngIf="eolData.modattemptsnoteacher" lines="none">
<ion-item class="ion-text-wrap" *ngIf="eolData.modattemptsnoteacher">
<ion-label>{{ eolData.modattemptsnoteacher.message }}</ion-label>
</ion-item>
<!-- If activity link was successfully formatted, render the button. -->
@ -252,7 +252,7 @@
[courseId]="courseId">
</core-format-text>
</ion-button>
<ion-item class="ion-text-wrap" *ngIf="activityLink && !activityLink.formatted" lines="none">
<ion-item class="ion-text-wrap" *ngIf="activityLink && !activityLink.formatted">
<!-- Activity link wasn't formatted, render the original link. -->
<ion-label>
<core-format-text [text]="activityLink.label" contextLevel="module" [contextInstanceId]="lesson?.coursemodule"

View File

@ -83,7 +83,7 @@
<ion-card-header class="ion-text-wrap">
<ion-card-title>{{page.qtype}}: {{page.title}}</ion-card-title>
</ion-card-header>
<ion-item class="ion-text-wrap" lines="none">
<ion-item class="ion-text-wrap">
<ion-label>
<h3 class="item-heading">{{ 'addon.mod_lesson.question' | translate }}</h3>
<p>
@ -94,13 +94,12 @@
</p>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" lines="none">
<ion-item class="ion-text-wrap">
<ion-label>
<h3 class="item-heading">{{ 'addon.mod_lesson.answer' | translate }}</h3>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" lines="none"
*ngIf="!page.answerdata || !page.answerdata.answers || !page.answerdata.answers.length">
<ion-item class="ion-text-wrap" *ngIf="!page.answerdata || !page.answerdata.answers || !page.answerdata.answers.length">
<ion-label>
<p>{{ 'addon.mod_lesson.didnotanswerquestion' | translate }}</p>
</ion-label>
@ -108,7 +107,7 @@
<div *ngIf="page.answerdata && page.answerdata.answers && page.answerdata.answers.length"
class="addon-mod_lesson-answer">
<ng-container *ngFor="let answer of page.answerdata.answers">
<ion-item lines="none" *ngIf="page.isContent">
<ion-item *ngIf="page.isContent">
<ion-label class="ion-text-wrap">
<ion-grid class="ion-no-padding">
<!-- Content page, display a button and the content. -->
@ -151,7 +150,7 @@
</ion-item>
<!-- Short answer or numeric. -->
<ion-item class="ion-text-wrap" *ngIf="answer[0].isText" lines="none">
<ion-item class="ion-text-wrap" *ngIf="answer[0].isText">
<ion-label>
<p>{{ answer[0].value }}</p>
<ion-badge *ngIf="answer[1]" color="dark">
@ -164,7 +163,7 @@
</ion-item>
<!-- Matching. -->
<ion-item lines="none" *ngIf="answer[0].isSelect">
<ion-item *ngIf="answer[0].isSelect">
<ion-label class="ion-text-wrap">
<ion-grid class="ion-no-padding">
<ion-row>
@ -191,8 +190,7 @@
</ion-item>
<!-- Essay or couldn't determine. -->
<ion-item class="ion-text-wrap" lines="none"
*ngIf="!answer[0].isCheckbox && !answer[0].isText && !answer[0].isSelect">
<ion-item class="ion-text-wrap" *ngIf="!answer[0].isCheckbox && !answer[0].isText && !answer[0].isSelect">
<ion-label>
<p>
<core-format-text [component]="component" [componentId]="lesson?.coursemodule"
@ -210,7 +208,7 @@
</ion-item>
</ng-container>
<ion-item class="ion-text-wrap" *ngIf="!page.isContent && !page.isQuestion" lines="none">
<ion-item class="ion-text-wrap" *ngIf="!page.isContent && !page.isQuestion">
<!-- Another page (end of branch, ...). -->
<ion-label>
<p>
@ -227,7 +225,7 @@
</ion-item>
</ng-container>
<ion-item class="ion-text-wrap" *ngIf="page.answerdata.response" lines="none">
<ion-item class="ion-text-wrap" *ngIf="page.answerdata.response">
<ion-label>
<h3 class="item-heading">{{ 'addon.mod_lesson.response' | translate }}</h3>
<p>

View File

@ -17,7 +17,7 @@
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
</ion-refresher>
<core-loading [hideUntil]="loaded">
<ion-list *ngIf="attempt" lines="none">
<ion-list *ngIf="attempt">
<ion-item class="ion-text-wrap">
<ion-label>
<h2>{{ 'addon.mod_quiz.attemptnumber' | translate }}</h2>

View File

@ -31,7 +31,7 @@
</ng-container>
</ion-card-title>
</ion-card-header>
<ion-list lines="none">
<ion-list>
<ion-item class="ion-text-wrap">
<ion-label>
<h2>{{ 'addon.mod_quiz.startedon' | translate }}</h2>

View File

@ -57,7 +57,7 @@
</core-format-text>
</ion-label>
</ion-item>
<ion-item *ngIf="!edit && workshop.overallfeedbackfiles && data.assessment?.feedbackattachmentfiles?.length" lines="none">
<ion-item *ngIf="!edit && workshop.overallfeedbackfiles && data.assessment?.feedbackattachmentfiles?.length">
<ion-label>
<core-files [files]="data.assessment?.feedbackattachmentfiles" [component]="component" [componentId]="componentId">
</core-files>

View File

@ -26,7 +26,7 @@
</div>
<ion-card *ngFor="let notification of notifications">
<ion-item class="ion-text-wrap" lines="none" [attr.aria-label]="
<ion-item class="ion-text-wrap" [attr.aria-label]="
notification.timeread
? notification.subject
: 'addon.notifications.unreadnotification' | translate: {$a: notification.subject}">

View File

@ -10,7 +10,7 @@
</ion-header>
<ion-content>
<core-loading [hideUntil]="loaded">
<ion-item class="ion-text-wrap" lines="none" [attr.aria-label]="subject">
<ion-item class="ion-text-wrap" [attr.aria-label]="subject">
<core-user-avatar *ngIf="userIdFrom > 0" slot="start" [userId]="userIdFrom" [profileUrl]="profileImageUrlFrom"
[fullname]="userFromFullName">
<img *ngIf="iconUrl && !modname" [src]="iconUrl" alt="" role="presentation" class="core-avatar-extra">

View File

@ -107,11 +107,11 @@
</ion-item>
<!-- Phone view -->
<ion-item class="ion-text-wrap ion-no-margin ion-hide-md-up" lines="none">
<ion-item class="ion-text-wrap ion-no-margin ion-hide-md-up">
<p class="item-heading">{{ notification.displayname }}</p>
</ion-item>
<!-- If notifications enabled, show toggles. If disabled, show "Disabled" instead of toggle. -->
<ion-item *ngFor="let state of ['loggedin', 'loggedoff']" class="ion-text-wrap ion-hide-md-up" lines="none">
<ion-item *ngFor="let state of ['loggedin', 'loggedoff']" class="ion-text-wrap ion-hide-md-up">
<ion-label class="ion-margin-horizontal">
<p>{{ 'core.settings.' + state | translate }}</p>
</ion-label>
@ -148,7 +148,7 @@
</ion-item-divider>
<ng-container *ngFor="let notification of component.notifications">
<!-- If notifications enabled, show toggles. If disabled, show "Disabled" instead of toggle. -->
<ion-item class="ion-text-wrap" lines="none">
<ion-item class="ion-text-wrap">
<ion-label>
<p>{{ notification.displayname }}</p>
</ion-label>

View File

@ -14,7 +14,7 @@
<ion-card-header>
<p class="ion-text-wrap ion-no-margin">{{ 'addon.storagemanager.courseinfo' | translate }}</p>
<ion-card-title>{{ title }}</ion-card-title>
<ion-item class="size ion-text-wrap ion-no-padding" lines="none">
<ion-item class="size ion-text-wrap ion-no-padding">
<ion-label>
<p class="item-heading ion-text-wrap">{{ 'addon.storagemanager.totaldownloads' | translate }}</p>
<ion-badge color="light">{{ totalSize | coreBytesToSize }}</ion-badge>

View File

@ -26,7 +26,7 @@
<ion-icon name="fas-trash" slot="icon-only" aria-hidden="true"></ion-icon>
</ion-button>
</ion-item>
<ion-item class="size ion-text-wrap" lines="none">
<ion-item class="size ion-text-wrap">
<ion-label>
<h2 class="ion-text-wrap">{{ 'addon.storagemanager.coursesspaceusage' | translate }}</h2>
<ion-badge color="light">{{ totalSize | coreBytesToSize }}</ion-badge>

View File

@ -1,4 +1,4 @@
<ion-item lines="none" class="core-timer" role="timer" [ngClass]="{'ion-text-center': align == 'center', 'ion-text-end': align == 'right'}">
<ion-item class="core-timer" role="timer" [ngClass]="{'ion-text-center': align == 'center', 'ion-text-end': align == 'right'}">
<ion-icon name="fas-clock" slot="start" aria-hidden="true"></ion-icon>
<ion-label>
<span *ngIf="timeLeft && timeLeft > 0 && timerText" class="core-timer-text">{{ timerText }}</span>

View File

@ -96,7 +96,7 @@
<ion-badge *ngIf="section.highlighted && highlighted" slot="end">{{highlighted}}</ion-badge>
</ion-item-divider>
<ion-item class="ion-text-wrap" *ngIf="section.summary" lines="none">
<ion-item class="ion-text-wrap" *ngIf="section.summary">
<ion-label>
<core-format-text [text]="section.summary" contextLevel="course" [contextInstanceId]="course.id">
</core-format-text>

View File

@ -1,4 +1,4 @@
<ion-item class="ion-text-wrap collapsible-title" lines="none">
<ion-item class="ion-text-wrap collapsible-title">
<core-mod-icon slot="start" [modicon]="modicon" [modname]="module.modname" [componentId]="module.instance">
</core-mod-icon>
<ion-label>
@ -11,7 +11,7 @@
<ng-content select="[title]"></ng-content>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" *ngIf="description" lines="none">
<ion-item class="ion-text-wrap" *ngIf="description">
<ion-label>
<core-format-text [text]="description" [component]="component" [componentId]="componentId" contextLevel="module"
[contextInstanceId]="module.id" [courseId]="courseId" [maxHeight]="expandDescription ? null : 120">
@ -20,7 +20,7 @@
</ion-item>
<ng-content select="[description]"></ng-content>
<ion-item class="ion-text-wrap core-module-dates" lines="none" *ngIf="showCompletion && (module.dates?.length ||
<ion-item class="ion-text-wrap core-module-dates" *ngIf="showCompletion && (module.dates?.length ||
(module.completiondata && module.completiondata.isautomatic && module.uservisible))">
<ion-label>
<!-- Activity dates. -->

View File

@ -1,6 +1,6 @@
<ion-card *ngIf="module.handlerData && module.visibleoncoursepage !== 0">
<ng-container *ngIf="!module.handlerData.loading">
<ion-item id="core-course-module-{{module.id}}" detail="false" lines="none"
<ion-item id="core-course-module-{{module.id}}" detail="false"
class="ion-text-wrap core-course-module-handler core-module-main-item {{module.handlerData.class}}"
(click)="moduleClicked($event)" [attr.aria-label]="module.handlerData.a11yTitle" [ngClass]="{
'has-module-info': hasInfo,
@ -57,7 +57,7 @@
</div>
</div>
</ion-item>
<ion-item *ngIf="hasInfo" id="core-course-module-{{module.id}}-info" detail="false" lines="none"
<ion-item *ngIf="hasInfo" id="core-course-module-{{module.id}}-info" detail="false"
class="ion-text-wrap core-course-module-handler core-course-module-info {{module.handlerData.class}}" [ngClass]="{
'item-media': module.handlerData.icon,
'item-dimmed': module.visible === 0 || module.uservisible === false
@ -99,7 +99,7 @@
<!-- Loading. -->
<ion-item *ngIf="module.handlerData.loading" role="status" class="ion-text-wrap" id="core-course-module-{{module.id}}"
[attr.aria-label]="module.handlerData.a11yTitle"
[ngClass]="['core-course-module-handler', 'core-module-loading', module.handlerData.class]" detail="false" lines="none">
[ngClass]="['core-course-module-handler', 'core-module-loading', module.handlerData.class]" detail="false">
<ion-label>
<ion-spinner [attr.aria-label]="'core.loading' | translate"></ion-spinner>
</ion-label>

View File

@ -12,8 +12,8 @@
</ng-container>
</div>
<ion-item class="ion-text-wrap" button lines="none" detail="false" (click)="openCourse()"
[attr.aria-label]="course.displayname || course.fullname" [class.item-disabled]="course.visible == 0">
<ion-item class="ion-text-wrap" button detail="false" (click)="openCourse()" [attr.aria-label]="course.displayname || course.fullname"
[class.item-disabled]="course.visible == 0">
<ng-container *ngIf="layout == 'list' || layout == 'listwithenrol'">
<ion-icon *ngIf="!course.courseImage" name="fas-graduation-cap" slot="start" class="course-icon core-course-thumb">

View File

@ -3,8 +3,8 @@
[style.background-color]="course.color">
<img *ngIf="course.courseImage" [src]="course.courseImage" core-external-content alt="" />
</div>
<ion-item button lines="none" (click)="openCourse()" [attr.aria-label]="course.displayname || course.fullname"
class="core-course-header" [class.item-disabled]="course.visible == 0"
<ion-item button (click)="openCourse()" [attr.aria-label]="course.displayname || course.fullname" class="core-course-header"
[class.item-disabled]="course.visible == 0"
[class.core-course-only-title]="!showAll || progress < 0 && completionUserTracked === false" detail="false">
<ion-label class="ion-text-wrap core-course-title"
[class.core-course-with-buttons]="courseOptionMenuEnabled || (downloadCourseEnabled && showDownload)"
@ -53,7 +53,7 @@
</ion-button>
</div>
</ion-item>
<ion-item *ngIf="showAll && progress >= 0 && completionUserTracked !== false" lines="none" class="core-course-progress">
<ion-item *ngIf="showAll && progress >= 0 && completionUserTracked !== false" class="core-course-progress">
<ion-label>
<core-progress-bar [progress]="progress" a11yText="core.courses.aria:courseprogress"></core-progress-bar>
</ion-label>

View File

@ -22,7 +22,7 @@
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
</ion-refresher>
<core-loading [hideUntil]="loaded">
<ion-item class="ion-text-wrap divider" lines="none">
<ion-item class="ion-text-wrap divider">
<ion-label>
<h2>{{ 'core.courses.mycourses' | translate }}</h2>
</ion-label>

View File

@ -18,7 +18,7 @@
<ion-content>
<ion-list>
<ng-container *ngIf="!changingPassword">
<ion-item class="ion-text-wrap" lines="none">
<ion-item class="ion-text-wrap">
<ion-label>
<h2>{{ 'core.login.forcepasswordchangenotice' | translate }}</h2>
<p class="ion-padding-top">{{ 'core.login.changepasswordinstructions' | translate }}</p>
@ -29,7 +29,7 @@
</ion-button>
</ng-container>
<ng-container *ngIf="changingPassword">
<ion-item class="ion-text-wrap" lines="none">
<ion-item class="ion-text-wrap">
<ion-label>
<p>{{ 'core.login.changepasswordreconnectinstructions' | translate }}</p>
</ion-label>
@ -38,7 +38,7 @@
{{ 'core.login.reconnect' | translate }}
</ion-button>
</ng-container>
<ion-item class="ion-text-wrap" lines="none">
<ion-item class="ion-text-wrap">
<ion-label>
<p>{{ 'core.login.changepasswordlogoutinstructions' | translate }}</p>
</ion-label>

View File

@ -54,7 +54,7 @@
<ng-container *ngIf="showScanQR">
<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-button expand="block" color="light" class="ion-margin" (click)="showInstructionsAndScanQR()">
<ion-icon slot="start" name="fas-qrcode" aria-hidden="true"></ion-icon>
{{ 'core.scanqr' | translate }}
</ion-button>
@ -68,7 +68,7 @@
</ion-button>
<ion-list *ngIf="identityProviders && identityProviders.length" class="ion-padding-top core-login-identity-providers">
<ion-item class="ion-text-wrap" lines="none">
<ion-item class="ion-text-wrap">
<ion-label>
<h3 class="item-heading">{{ 'core.login.potentialidps' | translate }}</h3>
</ion-label>
@ -81,12 +81,12 @@
</ion-list>
<ion-list *ngIf="canSignup" class="ion-padding-top core-login-sign-up">
<ion-item class="ion-text-wrap" lines="none">
<ion-item class="ion-text-wrap">
<ion-label>
<h3 class="item-heading">{{ 'core.login.firsttime' | translate }}</h3>
</ion-label>
</ion-item>
<ion-item class="ion-text-wrap" lines="none" *ngIf="authInstructions">
<ion-item class="ion-text-wrap" *ngIf="authInstructions">
<ion-label>
<p>
<core-format-text [text]="authInstructions" [filter]="false"></core-format-text>

View File

@ -232,7 +232,7 @@
</h3>
</ion-label>
</ion-item-divider>
<ion-item class="ion-text-wrap" lines="none">
<ion-item class="ion-text-wrap">
<ion-label>
<h3 class="item-heading">{{ 'core.considereddigitalminor' | translate }}</h3>
<p>{{ 'core.digitalminor_desc' | translate }}</p>

View File

@ -10,7 +10,7 @@
</ion-toolbar>
</ion-header>
<ion-content>
<ion-list lines="none">
<ion-list>
<ion-item class="ion-text-wrap">
<ion-label>{{ 'core.login.passwordforgotteninstructions2' | translate }}</ion-label>
</ion-item>

View File

@ -65,7 +65,7 @@
<ng-container *ngIf="showScanQR">
<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-button expand="block" color="light" class="ion-margin" (click)="showInstructionsAndScanQR()">
<ion-icon slot="start" name="fas-qrcode" aria-hidden="true"></ion-icon>
{{ 'core.scanqr' | translate }}
</ion-button>
@ -80,7 +80,7 @@
<!-- Identity providers. -->
<ion-list *ngIf="identityProviders && identityProviders.length" class="ion-padding-top core-login-identity-providers">
<ion-item class="ion-text-wrap" lines="none">
<ion-item class="ion-text-wrap">
<ion-label>
<h3 class="item-heading">{{ 'core.login.potentialidps' | translate }}</h3>
</ion-label>

View File

@ -42,7 +42,7 @@
</ion-item>
<ion-list [class.hidden]="!hasSites && !enteredSiteUrl" class="core-login-site-list">
<ion-item lines="none" class="core-login-site-list-title">
<ion-item class="core-login-site-list-title">
<ion-label>
<h2 class="item-heading">{{ 'core.login.selectsite' | translate }}</h2>
</ion-label>
@ -73,7 +73,7 @@
</div>
</ng-container>
<ion-item *ngIf="siteSelector == 'url'" lines="none">
<ion-item *ngIf="siteSelector == 'url'">
<ion-label>
<ion-button expand="block" [disabled]="!siteForm.valid" class="ion-text-wrap" type="submit">
{{ 'core.login.connect' | translate }}
@ -85,7 +85,7 @@
<ng-container *ngIf="fixedSites">
<!-- Pick the site from a list of fixed sites. -->
<ion-list *ngIf="siteSelector == 'list'">
<ion-item lines="none">
<ion-item>
<ion-label>
<h2 class="item-heading">{{ 'core.login.selectsite' | translate }}</h2>
</ion-label>
@ -101,8 +101,7 @@
<ng-container *ngIf="showScanQR && !hasSites && !enteredSiteUrl">
<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()"
aria-haspopup="dialog">
<ion-button expand="block" color="light" class="ion-margin" (click)="showInstructionsAndScanQR()" aria-haspopup="dialog">
<ion-icon slot="start" name="fas-qrcode" aria-hidden="true"></ion-icon>
{{ 'core.scanqr' | translate }}
</ion-button>

View File

@ -35,7 +35,7 @@
</ion-label>
</ion-item>
<ion-item class="ion-text-center" *ngIf="(!handlers || !handlers.length) && !handlersLoaded" lines="none">
<ion-item class="ion-text-center" *ngIf="(!handlers || !handlers.length) && !handlersLoaded">
<ion-label>
<ion-spinner [attr.aria-label]="'core.loading' | translate"></ion-spinner>
</ion-label>
@ -43,7 +43,7 @@
<ion-item button *ngFor="let handler of handlers" class="ion-text-wrap" (click)="handlerClicked($event, handler)"
[ngClass]="['core-user-menu-handler', handler.class || '']" [hidden]="handler.hidden"
[attr.aria-label]="handler.title | translate" detail="true" lines="none">
[attr.aria-label]="handler.title | translate" detail="true">
<ion-icon *ngIf="handler.icon" [name]="handler.icon" slot="start" aria-hidden="true"></ion-icon>
<ion-label>
<p class="item-heading">{{ handler.title | translate }}</p>

View File

@ -36,8 +36,7 @@
</ion-content>
<ion-footer class="ion-no-border">
<ion-item button class="ion-text-wrap ion-text-center core-about-deviceinfo" detail="false" (click)="openPage('deviceinfo')"
lines="none">
<ion-item button class="ion-text-wrap ion-text-center core-about-deviceinfo" detail="false" (click)="openPage('deviceinfo')">
<ion-label>
<h2>{{ appName }} {{ versionName }}</h2>
</ion-label>

View File

@ -36,7 +36,7 @@
</ion-segment>
</ion-item>
<ion-item class="ion-text-wrap core-settings-general-color-scheme" *ngIf="colorSchemes.length > 0"
[lines]="selectedScheme=='system' && isAndroid ? 'none' : 'inset'">
[lines]="selectedScheme=='system' && isAndroid ? 'none' : ''">
<ion-label>
<h2>{{ 'core.settings.colorscheme' | translate }}</h2>
<p *ngIf="colorSchemeDisabled" class="text-danger">{{ 'core.settings.forcedsetting' | translate }}</p>

View File

@ -55,7 +55,7 @@
</ion-content>
<ng-template #allCourseList>
<ion-item button class="ion-text-wrap" (click)="openAvailableCourses()" lines="none">
<ion-item button class="ion-text-wrap" (click)="openAvailableCourses()">
<ion-icon name="fas-graduation-cap" fixed-width slot="start" aria-hidden="true"></ion-icon>
<ion-label>
<h2>{{ 'core.courses.availablecourses' | translate}}</h2>
@ -69,7 +69,7 @@
</ng-template>
<ng-template #categories>
<ion-item button class="ion-text-wrap" (click)="openCourseCategories()" lines="none">
<ion-item button class="ion-text-wrap" (click)="openCourseCategories()">
<ion-icon name="fas-folder" slot="start" aria-hidden="true"></ion-icon>
<ion-label>
<h2>{{ 'core.courses.categories' | translate}}</h2>
@ -78,7 +78,7 @@
</ng-template>
<ng-template #enrolledCourseList>
<ion-item button class="ion-text-wrap" (click)="openMyCourses()" lines="none">
<ion-item button class="ion-text-wrap" (click)="openMyCourses()">
<ion-icon name="fas-graduation-cap" fixed-width slot="start" aria-hidden="true">
</ion-icon>
<ion-label>
@ -88,7 +88,7 @@
</ng-template>
<ng-template #courseSearch>
<ion-item button class="ion-text-wrap" (click)="openSearch()" lines="none">
<ion-item button class="ion-text-wrap" (click)="openSearch()">
<ion-icon name="fas-search" slot="start" aria-hidden="true"></ion-icon>
<ion-label>
<h2>{{ 'core.courses.searchcourses' | translate}}</h2>

View File

@ -1049,6 +1049,20 @@ audio.core-media-adapt-width {
width: 100%;
}
ion-item {
--inner-border-width: 0px;
}
ion-item.item-lines-full {
--inner-border-width: 0px;
--border-width: 0 0 1px 0;
}
ion-item.item-lines-inset {
--inner-border-width: 1px;
--border-width: 0px;
}
// Fake item.
div.fake-ion-item {
position: relative;
@ -1061,7 +1075,6 @@ div.fake-ion-item {
text-decoration: none;
overflow: hidden;
box-sizing: border-box;
}
html.md div.fake-ion-item {