MOBILE-3751 a11y: Improve headings
parent
db71af7440
commit
e95deab368
|
@ -23,7 +23,7 @@
|
|||
<img [src]="badge.badgeurl" [alt]="badge.name" core-external-content>
|
||||
</ion-avatar>
|
||||
<ion-label>
|
||||
<h2>{{ badge.name }}</h2>
|
||||
<p class="item-heading">{{ badge.name }}</p>
|
||||
<p>{{ badge.dateissued * 1000 | coreFormatDate :'strftimedatetimeshort' }}</p>
|
||||
</ion-label>
|
||||
<ion-badge slot="end" color="danger" *ngIf="badge.dateexpire && currentTime >= badge.dateexpire">
|
||||
|
|
|
@ -21,10 +21,10 @@
|
|||
<ion-label>
|
||||
<!-- Add the icon title so accessibility tools read it. -->
|
||||
<span class="sr-only" *ngIf="item.iconTitle">{{ item.iconTitle }}</span>
|
||||
<h2>
|
||||
<p class="item-heading">
|
||||
<core-format-text [text]="item.name" contextLevel="module" [contextInstanceId]="item.cmid"
|
||||
[courseId]="item.courseid"></core-format-text>
|
||||
</h2>
|
||||
</p>
|
||||
<p>
|
||||
<core-format-text [text]="item.coursename" contextLevel="course" [contextInstanceId]="item.courseid">
|
||||
</core-format-text>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<ion-item-group *ngFor="let dayEvents of filteredEvents">
|
||||
<ion-item-divider [color]="dayEvents.color">
|
||||
<ion-label><h2>{{ dayEvents.dayTimestamp * 1000 | coreFormatDate:"strftimedayshort" }}</h2></ion-label>
|
||||
<ion-label><h3>{{ dayEvents.dayTimestamp * 1000 | coreFormatDate:"strftimedayshort" }}</h3></ion-label>
|
||||
</ion-item-divider>
|
||||
<ng-container *ngFor="let event of dayEvents.events">
|
||||
<ion-item class="ion-text-wrap core-course-module-handler item-media" detail="false" (click)="action($event, event.url)"
|
||||
|
@ -9,11 +9,11 @@
|
|||
<ion-label>
|
||||
<!-- Add the icon title so accessibility tools read it. -->
|
||||
<span class="sr-only" *ngIf="event.iconTitle">{{ event.iconTitle }}</span>
|
||||
<h2>
|
||||
<p class="item-heading">
|
||||
<core-format-text [text]="event.name" contextLevel="module" [contextInstanceId]="event.id"
|
||||
[courseId]="event.course && event.course.id">
|
||||
</core-format-text>
|
||||
</h2>
|
||||
</p>
|
||||
<p *ngIf="showCourse && event.course">
|
||||
<core-format-text [text]="event.course.fullnamedisplay" contextLevel="course"
|
||||
[contextInstanceId]="event.course.id">
|
||||
|
|
|
@ -24,14 +24,14 @@
|
|||
<ion-item class="ion-text-wrap">
|
||||
<core-user-avatar [user]="entry.user" slot="start" [courseId]="entry.courseid"></core-user-avatar>
|
||||
<ion-label>
|
||||
<h2>
|
||||
<p class="item-heading">
|
||||
<core-format-text [text]="entry.subject" [contextLevel]="contextLevel"
|
||||
[contextInstanceId]="contextInstanceId">
|
||||
</core-format-text>
|
||||
<ion-note class="ion-float-end ion-padding-left ion-text-end">
|
||||
{{ 'addon.blog.' + entry.publishTranslated! | translate}}
|
||||
</ion-note>
|
||||
</h2>
|
||||
</p>
|
||||
<p>
|
||||
<ion-note class="ion-float-end ion-padding-left ion-text-end">
|
||||
{{entry.created | coreDateDayOrTime}}
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
</ion-button>
|
||||
</ion-col>
|
||||
<ion-col class="ion-text-center addon-calendar-period">
|
||||
<h3 id="addon-calendar-monthname">{{ periodName }}</h3>
|
||||
<h2 id="addon-calendar-monthname">{{ periodName }}</h2>
|
||||
</ion-col>
|
||||
<ion-col class="ion-text-end" *ngIf="canNavigate">
|
||||
<ion-button fill="clear" (click)="loadNext()" [attr.aria-label]="'core.next' | translate">
|
||||
|
|
|
@ -16,8 +16,10 @@
|
|||
{{ 'addon.calendar.type' + event.formattedType | translate }}
|
||||
<span class="sr-only" *ngIf="event.moduleIcon && event.iconTitle">{{ event.iconTitle }}</span>
|
||||
</span>
|
||||
<h2><core-format-text [text]="event.name" [contextLevel]="event.contextLevel"
|
||||
[contextInstanceId]="event.contextInstanceId"></core-format-text></h2>
|
||||
<p class="item-heading">
|
||||
<core-format-text [text]="event.name" [contextLevel]="event.contextLevel"
|
||||
[contextInstanceId]="event.contextInstanceId"></core-format-text>
|
||||
</p>
|
||||
<p [innerHTML]="event.formattedtime"></p>
|
||||
</ion-label>
|
||||
<ion-note *ngIf="event.offline && !event.deleted" slot="end">
|
||||
|
|
|
@ -71,8 +71,10 @@
|
|||
{{ 'addon.calendar.type' + event.formattedType | translate }}
|
||||
<span class="sr-only" *ngIf="event.moduleIcon && event.iconTitle">{{ event.iconTitle }}</span>
|
||||
</span>
|
||||
<h2><core-format-text [text]="event.name" [contextLevel]="event.contextLevel"
|
||||
[contextInstanceId]="event.contextInstanceId"></core-format-text></h2>
|
||||
<p class="item-heading">
|
||||
<core-format-text [text]="event.name" [contextLevel]="event.contextLevel"
|
||||
[contextInstanceId]="event.contextInstanceId"></core-format-text>
|
||||
</p>
|
||||
<p [innerHTML]="event.formattedtime"></p>
|
||||
</ion-label>
|
||||
<ion-note *ngIf="event.offline && !event.deleted" slot="end">
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
<ion-list *ngIf="filteredEvents && filteredEvents.length" class="ion-no-margin">
|
||||
<ng-container *ngFor="let event of filteredEvents">
|
||||
<ion-item-divider *ngIf="event.showDate">
|
||||
<ion-label><h2>{{ event.timestart * 1000 | coreFormatDate: "strftimedayshort" }}</h2></ion-label>
|
||||
<ion-label><p class="item-heading">{{ event.timestart * 1000 | coreFormatDate: "strftimedayshort" }}</p></ion-label>
|
||||
</ion-item-divider>
|
||||
<ion-item class="addon-calendar-event ion-text-wrap" [attr.aria-label]="event.name" (click)="gotoEvent(event.id)"
|
||||
[attr.aria-current]="event.id == eventId ? 'page' : 'false'"
|
||||
|
@ -51,7 +51,7 @@
|
|||
aria-hidden="true">
|
||||
</ion-icon>
|
||||
<ion-label>
|
||||
<h2>
|
||||
<p class="item-heading">
|
||||
<!-- Add the icon title so accessibility tools read it. -->
|
||||
<span class="sr-only">
|
||||
{{ 'addon.calendar.type' + event.formattedType | translate }}
|
||||
|
@ -60,7 +60,7 @@
|
|||
<core-format-text [text]="event.name" [contextLevel]="event.contextLevel"
|
||||
[contextInstanceId]="event.contextInstanceId">
|
||||
</core-format-text>
|
||||
</h2>
|
||||
</p>
|
||||
<p>
|
||||
{{ event.timestart * 1000 | coreFormatDate: "strftimetime" }}
|
||||
<span *ngIf="event.timeduration && event.endsSameDay">
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
[attr.aria-label]="competency.competency.shortname" (click)="competencies.select(competency)"
|
||||
[attr.aria-current]="competencies.getItemAriaCurrent(competency)" button>
|
||||
<ion-label>
|
||||
<h2>{{ competency.competency.shortname }} <em>{{competency.competency.idnumber}}</em></h2>
|
||||
<p class="item-heading">{{ competency.competency.shortname }} <em>{{competency.competency.idnumber}}</em></p>
|
||||
</ion-label>
|
||||
<ion-badge slot="end" *ngIf="competency.usercompetency"
|
||||
[color]="competency.usercompetency.proficiency ? 'success' : 'danger'">
|
||||
|
|
|
@ -121,7 +121,7 @@
|
|||
[courseId]="courseId">
|
||||
<core-user-avatar [user]="evidence.actionuser" slot="start"></core-user-avatar>
|
||||
<ion-label>
|
||||
<h2>{{ evidence.actionuser.fullname }}</h2>
|
||||
<p class="item-heading">{{ evidence.actionuser.fullname }}</p>
|
||||
<p>{{ evidence.timemodified * 1000 | coreFormatDate }}</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
|
|
|
@ -44,9 +44,9 @@
|
|||
</ion-item>
|
||||
</ion-card>
|
||||
|
||||
<h3 class="ion-margin-horizontal" *ngIf="competencies && competencies.statistics.competencycount > 0">
|
||||
<h2 class="ion-margin-horizontal" *ngIf="competencies && competencies.statistics.competencycount > 0">
|
||||
{{ 'addon.competency.coursecompetencies' | translate }}
|
||||
</h3>
|
||||
</h2>
|
||||
<ion-card *ngIf="user">
|
||||
<ion-item class="ion-text-wrap">
|
||||
<core-user-avatar [user]="user" slot="start"></core-user-avatar>
|
||||
|
@ -62,7 +62,9 @@
|
|||
<ion-item class="ion-text-wrap" (click)="openCompetency(competency.competency.id)"
|
||||
[attr.aria-label]="competency.competency.shortname" detail="true" button>
|
||||
<ion-label>
|
||||
<h2><strong>{{competency.competency.shortname}} <em>{{competency.competency.idnumber}}</em></strong></h2>
|
||||
<p class="item-heading">
|
||||
<strong>{{competency.competency.shortname}} <em>{{competency.competency.idnumber}}</em></strong>
|
||||
</p>
|
||||
</ion-label>
|
||||
<ion-badge slot="end" *ngIf="competency.usercompetencycourse && competency.usercompetencycourse.gradename"
|
||||
[color]="competency.usercompetencycourse.proficiency ? 'success' : 'danger'">
|
||||
|
|
|
@ -78,7 +78,9 @@
|
|||
<ion-item class="ion-text-wrap" *ngFor="let competency of plan.competencies"
|
||||
(click)="openCompetency(competency.competency.id)"
|
||||
[attr.aria-label]="competency.competency.shortname" detail="true" button>
|
||||
<ion-label><h2>{{competency.competency.shortname}} <em>{{competency.competency.idnumber}}</em></h2></ion-label>
|
||||
<ion-label>
|
||||
<p class="item-heading">{{competency.competency.shortname}} <em>{{competency.competency.idnumber}}</em></p>
|
||||
</ion-label>
|
||||
<ion-badge *ngIf="competency.usercompetencyplan" slot="end"
|
||||
[color]="competency.usercompetencyplan.proficiency ? 'success' : 'danger'">
|
||||
{{ competency.usercompetencyplan.gradename }}
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<ion-item class="ion-text-wrap" *ngFor="let plan of plans.items" [attr.aria-label]="plan.name"
|
||||
(click)="plans.select(plan)" [attr.aria-current]="plans.getItemAriaCurrent(plan)" button>
|
||||
<ion-label>
|
||||
<h2>{{ plan.name }}</h2>
|
||||
<p class="item-heading">{{ plan.name }}</p>
|
||||
<p *ngIf="plan.duedate > 0">
|
||||
{{ 'addon.competency.duedate' | translate }}:
|
||||
{{ plan.duedate * 1000 | coreFormatDate :'strftimedatetimeshort' }}
|
||||
|
|
|
@ -32,7 +32,9 @@
|
|||
</ion-item-divider>
|
||||
<ion-item class="ion-hide-md-up ion-text-wrap" *ngFor="let criteria of completion.completions">
|
||||
<ion-label>
|
||||
<h2><core-format-text clean="true" [text]="criteria.details.criteria" [filter]="false"></core-format-text></h2>
|
||||
<p class="item-heading">
|
||||
<core-format-text clean="true" [text]="criteria.details.criteria" [filter]="false"></core-format-text>
|
||||
</p>
|
||||
<p><core-format-text clean="true" [text]="criteria.details.requirement" [filter]="false"></core-format-text></p>
|
||||
</ion-label>
|
||||
<strong slot="end">{{ criteria.status }}</strong>
|
||||
|
|
|
@ -37,12 +37,12 @@
|
|||
<core-user-avatar [user]="member" [linkProfile]="false" [checkOnline]="member.showonlinestatus" slot="start">
|
||||
</core-user-avatar>
|
||||
<ion-label>
|
||||
<h2>
|
||||
<p class="item-heading">
|
||||
{{ member.fullname }}
|
||||
<ion-icon name="fas-user-slash" *ngIf="member.isblocked"
|
||||
[attr.aria-label]="'addon.messages.contactblocked' | translate">
|
||||
</ion-icon>
|
||||
</h2>
|
||||
</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
margin-left: 0;
|
||||
}
|
||||
|
||||
h2 {
|
||||
.item-heading {
|
||||
core-format-text {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
@ -52,7 +52,7 @@
|
|||
}
|
||||
|
||||
.addon-message-discussion {
|
||||
h2 {
|
||||
.item-heading {
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
|
@ -66,7 +66,7 @@
|
|||
:host-context([dir=rtl]) {
|
||||
.addon-messages-conversation-item,
|
||||
.addon-message-discussion {
|
||||
h2 ion-icon {
|
||||
.item-heading ion-icon {
|
||||
margin-right: 2px;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
<ion-list *ngFor="let contactType of contactTypes" class="ion-no-margin">
|
||||
<ng-container *ngIf="contacts[contactType] && (contacts[contactType].length > 0 || contactType === searchType)">
|
||||
<ion-item-divider>
|
||||
<ion-label><h2>{{ 'addon.messages.type_' + contactType | translate }}</h2></ion-label>
|
||||
<ion-label><p class="item-heading">{{ 'addon.messages.type_' + contactType | translate }}</p></ion-label>
|
||||
<ion-note slot="end" class="ion-padding-end"><ion-badge>{{ contacts[contactType].length }}</ion-badge></ion-note>
|
||||
</ion-item-divider>
|
||||
<ng-container *ngFor="let contact of contacts[contactType]">
|
||||
|
@ -41,7 +41,7 @@
|
|||
[attr.aria-label]="contact.fullname" (click)="gotoDiscussion(contact.id)" detail="true" button
|
||||
[attr.aria-current]="contact.id == discussionUserId ? 'page' : 'false'">
|
||||
<core-user-avatar [user]="contact" slot="start" [checkOnline]="contact.showonlinestatus"></core-user-avatar>
|
||||
<ion-label><h2>{{ contact.fullname }}</h2></ion-label>
|
||||
<ion-label><p class="item-heading">{{ contact.fullname }}</p></ion-label>
|
||||
</ion-item>
|
||||
</ng-container>
|
||||
</ng-container>
|
||||
|
|
|
@ -33,13 +33,13 @@
|
|||
[checkOnline]="contact.showonlinestatus" [linkProfile]="false">
|
||||
</core-user-avatar>
|
||||
<ion-label>
|
||||
<h2>
|
||||
<p class="item-heading">
|
||||
<core-format-text [text]="contact.fullname" contextLevel="system" [contextInstanceId]="0">
|
||||
</core-format-text>
|
||||
<ion-icon *ngIf="contact.isblocked" name="fas-user-slash" slot="end"
|
||||
[attr.aria-label]="'addon.messages.contactblocked' | translate">
|
||||
</ion-icon>
|
||||
</h2>
|
||||
</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
</ion-list>
|
||||
|
|
|
@ -73,12 +73,14 @@
|
|||
<p class="ion-text-center"><i>{{ 'addon.messages.selfconversationdefaultmessage' | translate }}</i></p>
|
||||
</ng-container>
|
||||
|
||||
<h2 class="sr-only">{{ title }}</h2>
|
||||
|
||||
<ion-list class="addon-messages-discussion-container" [class.addon-messages-discussion-group]="isGroup"
|
||||
[attr.aria-live]="'polite'">
|
||||
<ng-container *ngFor="let message of messages; index as index; last as last">
|
||||
<h6 class="ion-text-center addon-messages-date" *ngIf="message.showDate">
|
||||
<h3 class="ion-text-center addon-messages-date" *ngIf="message.showDate">
|
||||
{{ message.timecreated | coreFormatDate: "strftimedayshort" }}
|
||||
</h6>
|
||||
</h3>
|
||||
|
||||
<ion-chip class="addon-messages-unreadfrom" *ngIf="unreadMessageFrom && message.id == unreadMessageFrom"
|
||||
color="light">
|
||||
|
@ -93,7 +95,7 @@
|
|||
[@coreSlideInOut]="message.useridfrom == currentUserId ? '' : 'fromLeft'">
|
||||
<ion-label>
|
||||
<!-- User data. -->
|
||||
<h2 class="addon-message-user" [attr.aria-label]="message.useridfrom == currentUserId ?
|
||||
<div class="item-heading addon-message-user" [attr.aria-label]="message.useridfrom == currentUserId ?
|
||||
('addon.messages.you' | translate) : members[message.useridfrom].fullname">
|
||||
<core-user-avatar slot="start" [user]="members[message.useridfrom]" [linkProfile]="false"
|
||||
*ngIf="message.showUserData"></core-user-avatar>
|
||||
|
@ -104,7 +106,7 @@
|
|||
<ion-note *ngIf="message.pending">
|
||||
<ion-icon name="fas-clock" [attr.aria-label]="'core.notsent' | translate" role="status"></ion-icon>
|
||||
</ion-note>
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
<!-- Some messages have <p> and some others don't. Add a <p> so they all have same styles. -->
|
||||
<p class="addon-message-text">
|
||||
|
|
|
@ -183,7 +183,7 @@
|
|||
|
||||
ion-item.addon-message.addon-message-mine + ion-item.addon-message.addon-message-no-user.addon-message-mine,
|
||||
ion-item.addon-message.addon-message-not-mine + ion-item.addon-message.addon-message-no-user.addon-message-not-mine {
|
||||
h2 {
|
||||
.item-heading {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
margin-top: -8px;
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
[attr.aria-current]="result.userid == discussionUserId ? 'page' : 'false'">
|
||||
<core-user-avatar [user]="result" slot="start" [checkOnline]="result.showonlinestatus"></core-user-avatar>
|
||||
<ion-label>
|
||||
<h2>{{ result.fullname }}</h2>
|
||||
<p class="item-heading">{{ result.fullname }}</p>
|
||||
<p><core-format-text clean="true" singleLine="true" [text]="result.lastmessage" contextLevel="system"
|
||||
[contextInstanceId]="0"></core-format-text></p>
|
||||
</ion-label>
|
||||
|
@ -56,7 +56,7 @@
|
|||
<core-user-avatar [user]="discussion" slot="start" checkOnline="false"></core-user-avatar>
|
||||
<ion-label>
|
||||
<div class="flex-row ion-justify-content-between">
|
||||
<h2>{{ discussion.fullname }}</h2>
|
||||
<p class="item-heading">{{ discussion.fullname }}</p>
|
||||
<ion-note *ngIf="discussion.message!.timecreated > 0 || discussion.unread">
|
||||
<span *ngIf="discussion.message!.timecreated > 0" class="addon-message-last-message-date">
|
||||
{{discussion.message!.timecreated / 1000 | coreDateDayOrTime}}
|
||||
|
|
|
@ -163,13 +163,13 @@
|
|||
|
||||
<ion-label>
|
||||
<div class="flex-row ion-justify-content-between">
|
||||
<h2>
|
||||
<p class="item-heading">
|
||||
<core-format-text [text]="conversation.name" contextLevel="system" [contextInstanceId]="0"></core-format-text>
|
||||
<ion-icon name="fas-user-slash" *ngIf="conversation.isblocked"
|
||||
[title]="'addon.messages.contactblocked' | translate"></ion-icon>
|
||||
<ion-icon *ngIf="conversation.ismuted" name="fas-volume-mute"
|
||||
[title]="'addon.messages.mutedconversation' | translate"></ion-icon>
|
||||
</h2>
|
||||
</p>
|
||||
<ion-note *ngIf="conversation.lastmessagedate > 0 || conversation.unreadcount">
|
||||
<span *ngIf="conversation.lastmessagedate > 0" class="addon-message-last-message-date">
|
||||
{{conversation.lastmessagedate | coreDateDayOrTime}}
|
||||
|
|
|
@ -47,13 +47,13 @@
|
|||
button>
|
||||
<core-user-avatar slot="start" [user]="result" [checkOnline]="true" [linkProfile]="false"></core-user-avatar>
|
||||
<ion-label>
|
||||
<h2>
|
||||
<p class="item-heading">
|
||||
<core-format-text [text]="result.fullname" [highlight]="result.highlightName" [filter]="false">
|
||||
</core-format-text>
|
||||
<ion-icon name="fa-ban" *ngIf="result.isblocked"
|
||||
[attr.aria-label]="'addon.messages.contactblocked' | translate">
|
||||
</ion-icon>
|
||||
</h2>
|
||||
</p>
|
||||
<ion-note *ngIf="result.lastmessagedate > 0">
|
||||
{{result.lastmessagedate | coreDateDayOrTime}}
|
||||
</ion-note>
|
||||
|
|
|
@ -43,10 +43,10 @@
|
|||
[attr.aria-current]="submissions.getItemAriaCurrent(submission)">
|
||||
<core-user-avatar [user]="submission" [linkProfile]="false" slot="start"></core-user-avatar>
|
||||
<ion-label>
|
||||
<h2 *ngIf="submission.userfullname">{{submission.userfullname}}</h2>
|
||||
<h2 *ngIf="!submission.userfullname">
|
||||
<p class="item-heading" *ngIf="submission.userfullname">{{submission.userfullname}}</p>
|
||||
<p class="item-heading" *ngIf="!submission.userfullname">
|
||||
{{ 'addon.mod_assign.hiddenuser' | translate }}{{submission.blindid}}
|
||||
</h2>
|
||||
</p>
|
||||
<p *ngIf="assign && assign!.teamsubmission">
|
||||
<span *ngIf="submission.groupname">{{submission.groupname}}</span>
|
||||
<span *ngIf="assign!.preventsubmissionnotingroup && !submission.groupname && submission.noGroups
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
<core-user-avatar [user]="user" slot="start" [linkProfile]="false"></core-user-avatar>
|
||||
<ion-label>
|
||||
<h2>{{ user.fullname }}</h2>
|
||||
<p class="item-heading">{{ user.fullname }}</p>
|
||||
<ng-container *ngIf="currentUserId != user.id && isOnline">
|
||||
<ion-button fill="clear" (click)="talkTo(user)">
|
||||
<ion-icon name="fas-comments" slot="start" aria-hidden="true"></ion-icon>
|
||||
|
|
|
@ -19,9 +19,9 @@
|
|||
<ion-list class="addon-messages-discussion-container" aria-live="polite">
|
||||
<ng-container *ngFor="let message of messages; index as index; last as last">
|
||||
|
||||
<h6 class="ion-text-center addon-messages-date" *ngIf="message.showDate">
|
||||
<p class="ion-text-center addon-messages-date" *ngIf="message.showDate">
|
||||
{{ message.timestamp * 1000 | coreFormatDate: "strftimedayshort" }}
|
||||
</h6>
|
||||
</p>
|
||||
|
||||
<div class="ion-text-center addon-mod_chat-notice" *ngIf="message.special">
|
||||
<ion-badge class="ion-text-wrap" color="success" *ngIf="message.system && message.message == 'enter'">
|
||||
|
|
|
@ -14,9 +14,9 @@
|
|||
<ion-list class="addon-messages-discussion-container" aria-live="polite">
|
||||
<ng-container *ngFor="let message of messages; index as index;">
|
||||
|
||||
<h6 class="ion-text-center addon-messages-date" *ngIf="message.showDate">
|
||||
<div class="ion-text-center addon-messages-date" *ngIf="message.showDate">
|
||||
{{ message.timestamp * 1000 | coreFormatDate:"strftimedayshort" }}
|
||||
</h6>
|
||||
</div>
|
||||
|
||||
<div class="ion-text-center addon-mod_chat-notice" *ngIf="message.special">
|
||||
<ion-badge class="ion-text-wrap" color="success" *ngIf="message.issystem && message.message == 'enter'">
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<ion-item class="ion-text-wrap">
|
||||
<ion-label>
|
||||
<h2>{{ session.sessionstart * 1000 | coreFormatDate }}</h2>
|
||||
<p class="item-heading">{{ session.sessionstart * 1000 | coreFormatDate }}</p>
|
||||
<p *ngIf="session.duration">{{ session.duration | coreDuration }}</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
|
|
|
@ -131,11 +131,11 @@
|
|||
<ion-item-group *ngFor="let result of results">
|
||||
<ion-item-divider class="ion-text-wrap">
|
||||
<ion-label>
|
||||
<h2>
|
||||
<h3 class="item-heading">
|
||||
<core-format-text [text]="result.text" contextLevel="module" [contextInstanceId]="module.id"
|
||||
[courseId]="courseId">
|
||||
</core-format-text>
|
||||
</h2>
|
||||
</h3>
|
||||
<p>
|
||||
{{ 'addon.mod_choice.numberofuser' | translate }}: {{ result.numberofuser }}
|
||||
({{ 'core.percentagenumber' | translate: {$a: result.percentageamountfixed} }})
|
||||
|
|
|
@ -204,11 +204,11 @@
|
|||
<ion-list *ngIf="items && items.length">
|
||||
<ion-item class="ion-text-wrap core-analysis" *ngFor="let item of items">
|
||||
<ion-label>
|
||||
<h2>
|
||||
<p class="item-heading">
|
||||
{{item.num}}. <core-format-text [component]="component" [componentId]="componentId" [text]="item.name"
|
||||
contextLevel="module" [contextInstanceId]="module.id" [courseId]="courseId">
|
||||
</core-format-text>
|
||||
</h2>
|
||||
</p>
|
||||
<p>
|
||||
<core-format-text [component]="component" [componentId]="componentId" [text]="item.label"
|
||||
contextLevel="module" [contextInstanceId]="module.id" [courseId]="courseId">
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
<ion-item *ngFor="let user of users" class="ion-text-wrap">
|
||||
<core-user-avatar [user]="user" slot="start"></core-user-avatar>
|
||||
<ion-label>
|
||||
<h2>{{ user.fullname }}</h2>
|
||||
<p class="item-heading">{{ user.fullname }}</p>
|
||||
<p>
|
||||
<ion-badge color="success" *ngIf="user.started">
|
||||
{{ 'addon.mod_feedback.started' | translate}}
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
(click)="responses.select(attempt)" [attr.aria-current]="responses.getItemAriaCurrent(attempt)">
|
||||
<core-user-avatar [user]="attempt" slot="start"></core-user-avatar>
|
||||
<ion-label>
|
||||
<h2>{{ attempt.fullname }}</h2>
|
||||
<p class="item-heading">{{ attempt.fullname }}</p>
|
||||
<p *ngIf="attempt.timemodified">{{attempt.timemodified * 1000 | coreFormatDate }}</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
<ion-item class="item-file" (click)="openFolder(folder)" detail="true" button>
|
||||
<ion-icon name="fas-folder" slot="start" [attr.aria-label]="'core.folder' | translate"></ion-icon>
|
||||
<ion-label>
|
||||
<h2>{{folder.filename}}</h2>
|
||||
<p class="item-heading">{{folder.filename}}</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
</ng-container>
|
||||
|
|
|
@ -89,7 +89,7 @@
|
|||
(click)="discussions.select(discussion)" button>
|
||||
<ion-label>
|
||||
<div class="addon-mod-forum-discussion-title">
|
||||
<h2 class="ion-text-wrap">
|
||||
<p class="ion-text-wrap item-heading">
|
||||
<ion-icon name="fa-map-pin" *ngIf="discussion.pinned"
|
||||
[attr.aria-label]="'addon.mod_forum.discussionpinned' | translate"></ion-icon>
|
||||
<ion-icon name="fa-star" class="addon-forum-star" *ngIf="!discussion.pinned && discussion.starred"
|
||||
|
@ -98,7 +98,7 @@
|
|||
[text]="discussion.subject"
|
||||
contextLevel="module" [contextInstanceId]="module && module.id" [courseId]="courseId">
|
||||
</core-format-text>
|
||||
</h2>
|
||||
</p>
|
||||
<ion-button *ngIf="canPin || discussion.canlock || discussion.canfavourite"
|
||||
fill="clear" color="dark"
|
||||
[attr.aria-label]="('core.displayoptions' | translate)"
|
||||
|
@ -111,7 +111,7 @@
|
|||
<core-user-avatar *ngIf="discussion.userfullname" [user]="discussion" slot="start" [courseId]="courseId">
|
||||
</core-user-avatar>
|
||||
<div class="addon-mod-forum-discussion-author">
|
||||
<h3 *ngIf="discussion.userfullname">{{discussion.userfullname}}</h3>
|
||||
<span *ngIf="discussion.userfullname">{{discussion.userfullname}}</span>
|
||||
<p *ngIf="discussion.groupname">
|
||||
<ion-icon name="fas-users" [attr.aria-label]="'addon.mod_forum.group' | translate">
|
||||
</ion-icon> {{ discussion.groupname }}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
ion-label {
|
||||
margin-top: 4px;
|
||||
|
||||
h2 {
|
||||
.item-heading {
|
||||
margin-top: 8px;
|
||||
margin-bottom: 8px;
|
||||
font-weight: bold;
|
||||
|
@ -36,7 +36,7 @@
|
|||
align-items: center;
|
||||
}
|
||||
|
||||
.addon-mod-forum-discussion-title h2,
|
||||
.addon-mod-forum-discussion-title .item-heading,
|
||||
.addon-mod-forum-discussion-info .addon-mod-forum-discussion-author {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
<core-user-avatar *ngIf="post.author && post.author.fullname" [user]="post.author" slot="start" [courseId]="courseId">
|
||||
</core-user-avatar>
|
||||
<div class="addon-mod-forum-post-author">
|
||||
<h3 *ngIf="post.author && post.author.fullname">{{post.author.fullname}}</h3>
|
||||
<span *ngIf="post.author && post.author.fullname">{{post.author.fullname}}</span>
|
||||
<p *ngIf="post.author && post.author.groups">
|
||||
<ng-container *ngFor="let group of post.author.groups">
|
||||
<ion-icon name="fas-users" [attr.aria-label]="'addon.mod_forum.group' | translate">
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
margin-top: 0px;
|
||||
}
|
||||
|
||||
.addon-mod-forum-post-title h2,
|
||||
.addon-mod-forum-post-title .item-heading,
|
||||
.addon-mod-forum-post-info .addon-mod-forum-post-author {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
|
|
@ -30,10 +30,10 @@
|
|||
</ion-item>
|
||||
<ion-item class="ion-text-wrap" *ngIf="!showAuthor">
|
||||
<ion-label>
|
||||
<h2>
|
||||
<p class="item-heading">
|
||||
<core-format-text [text]="entry.concept" contextLevel="module" [contextInstanceId]="componentId">
|
||||
</core-format-text>
|
||||
</h2>
|
||||
</p>
|
||||
</ion-label>
|
||||
<ion-note slot="end" *ngIf="showDate">{{ entry.timemodified | coreDateDayOrTime }}</ion-note>
|
||||
</ion-item>
|
||||
|
|
|
@ -300,7 +300,7 @@
|
|||
<core-user-avatar [user]="student" slot="start" [userId]="student.id" [courseId]="courseId">
|
||||
</core-user-avatar>
|
||||
<ion-label>
|
||||
<h2>{{ student.fullname }}</h2>
|
||||
<p class="item-heading">{{ student.fullname }}</p>
|
||||
<core-progress-bar [progress]="student.bestgrade" a11yText="addon.mod_lesson.grade">
|
||||
</core-progress-bar>
|
||||
</ion-label>
|
||||
|
|
|
@ -74,7 +74,7 @@
|
|||
</ion-item>
|
||||
<ion-item class="ion-text-wrap" *ngFor="let data of additionalData">
|
||||
<ion-label>
|
||||
<h2>{{ data.title }}</h2>
|
||||
<p class="item-heading">{{ data.title }}</p>
|
||||
<core-format-text [component]="component" [componentId]="cmId" [text]="data.content"
|
||||
contextLevel="module" [contextInstanceId]="cmId" [courseId]="courseId">
|
||||
</core-format-text>
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
<ion-item class="ion-text-wrap">
|
||||
<core-user-avatar [user]="note" [courseId]="courseId" slot="start" *ngIf="!userId"></core-user-avatar>
|
||||
<ion-label>
|
||||
<h2 *ngIf="!userId">{{note.userfullname}}</h2>
|
||||
<p class="item-heading" *ngIf="!userId">{{note.userfullname}}</p>
|
||||
<p *ngIf="!note.deleted && !note.offline" slot="end">
|
||||
<span class="ion-text-wrap">{{note.lastmodified | coreDateDayOrTime}}</span>
|
||||
</p>
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
role="presentation" class="core-notification-icon" slot="start">
|
||||
|
||||
<ion-label>
|
||||
<h2>{{ notification.subject }}</h2>
|
||||
<p class="item-heading">{{ notification.subject }}</p>
|
||||
<p *ngIf="notification.userfromfullname">{{ notification.userfromfullname }}</p>
|
||||
</ion-label>
|
||||
<ion-note slot="end" class="ion-float-end ion-padding-left ion-text-end">
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
<ion-item class="size ion-text-wrap ion-no-padding" lines="none">
|
||||
<ion-icon name="fas-archive" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>
|
||||
<h2 class="ion-text-wrap">{{ 'addon.storagemanager.storageused' | translate }}</h2>
|
||||
<p class="item-heading ion-text-wrap">{{ 'addon.storagemanager.storageused' | translate }}</p>
|
||||
</ion-label>
|
||||
<p slot="end" class="ion-text-end">{{ totalSize | coreBytesToSize }}</p>
|
||||
<ion-button slot="end" (click)="deleteForCourse()" [disabled]="totalSize == 0">
|
||||
|
@ -32,7 +32,7 @@
|
|||
<ion-card-header>
|
||||
<ion-item class="ion-no-padding">
|
||||
<ion-label>
|
||||
<h2 class="ion-text-wrap">{{ section.name }}</h2>
|
||||
<p class="item-heading ion-text-wrap">{{ section.name }}</p>
|
||||
</ion-label>
|
||||
<p slot="end" class="ion-text-end">{{ section.totalSize | coreBytesToSize }}</p>
|
||||
<ion-button slot="end" (click)="deleteForSection(section)">
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
padding-top: 8px;
|
||||
padding-bottom: 8px;
|
||||
}
|
||||
ion-card.section h2 {
|
||||
ion-card.section .item-heading {
|
||||
font-weight: bold;
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
|
|
@ -30,9 +30,11 @@
|
|||
<ion-list>
|
||||
<ion-item *ngFor="let course of downloadedCourses" class="course">
|
||||
<ion-label class="ion-text-wrap">
|
||||
<h2 *ngIf="course.displayname">{{ course.displayname }}</h2>
|
||||
<h2 *ngIf="!course.displayname">{{ course.fullname }}</h2>
|
||||
<h3 *ngIf="course.isDownloading">{{ 'core.downloading' | translate }}</h3>
|
||||
<p class="item-heading" *ngIf="course.displayname">{{ course.displayname }}</p>
|
||||
<p class="item-heading" *ngIf="!course.displayname">{{ course.fullname }}</p>
|
||||
<p class="item-heading item-heading-secondary" *ngIf="course.isDownloading">
|
||||
{{ 'core.downloading' | translate }}
|
||||
</p>
|
||||
</ion-label>
|
||||
<p slot="end" class="ion-text-end">{{ course.totalSize | coreBytesToSize }}</p>
|
||||
<ion-button slot="end" (click)="deleteCourse(course)" [disabled]="course.isDownloading">
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
:host {
|
||||
ion-item.course {
|
||||
h2 {
|
||||
.item-heading {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h3 {
|
||||
.item-heading.item-heading-secondary {
|
||||
color: $subdued-text-color;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<img [src]="fileIcon" alt="" role="presentation" />
|
||||
</ion-thumbnail>
|
||||
<ion-label>
|
||||
<h2>{{fileName}}</h2>
|
||||
<p class="item-heading">{{fileName}}</p>
|
||||
<p *ngIf="fileSizeReadable">{{ fileSizeReadable }}</p>
|
||||
<p *ngIf="showTime">{{ timemodified * 1000 | coreFormatDate }}</p>
|
||||
</ion-label>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
<ion-label>
|
||||
<!-- File name and edit button (if editable). -->
|
||||
<h3 *ngIf="!editMode">{{fileName}}</h3>
|
||||
<p class="item-heading" *ngIf="!editMode">{{fileName}}</p>
|
||||
<!-- More data about the file. -->
|
||||
<p *ngIf="size && !editMode">{{ size }}</p>
|
||||
<p *ngIf="timemodified && !editMode">{{ timemodified }}</p>
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
<ion-item class="ion-text-wrap">
|
||||
<core-user-avatar [user]="offlineComment" slot="start"></core-user-avatar>
|
||||
<ion-label>
|
||||
<h2>{{ offlineComment.fullname }}</h2>
|
||||
<p class="item-heading">{{ offlineComment.fullname }}</p>
|
||||
<p>
|
||||
<ion-icon name="fas-clock" aria-hidden="true"></ion-icon> {{ 'core.notsent' | translate }}
|
||||
</p>
|
||||
|
@ -70,7 +70,7 @@
|
|||
<ion-item class="ion-text-wrap">
|
||||
<core-user-avatar [user]="comment" slot="start"></core-user-avatar>
|
||||
<ion-label>
|
||||
<h2>{{ comment.fullname }}</h2>
|
||||
<p class="item-heading">{{ comment.fullname }}</p>
|
||||
<p *ngIf="!comment.deleted">{{ comment.timecreated * 1000 | coreFormatDate: 'strftimerecentfull' }}</p>
|
||||
<p *ngIf="comment.deleted">
|
||||
<ion-icon name="fas-trash" aria-hidden="true"></ion-icon> <span class="ion-text-wrap">
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
onError="this.src='assets/img/user-avatar.png'">
|
||||
</ion-avatar>
|
||||
<ion-label>
|
||||
<h2>{{site.fullName}}</h2>
|
||||
<p class="item-heading">{{site.fullName}}</p>
|
||||
<p><core-format-text [text]="site.siteName" clean="true" [siteId]="site.id"></core-format-text></p>
|
||||
<p>{{site.siteUrl}}</p>
|
||||
</ion-label>
|
||||
|
|
|
@ -17,11 +17,11 @@
|
|||
class="core-module-icon">
|
||||
|
||||
<ion-label class="core-module-title">
|
||||
<h2>
|
||||
<p class="item-heading">
|
||||
<core-format-text [text]="module.handlerData.title" contextLevel="module" [contextInstanceId]="module.id"
|
||||
[courseId]="courseId" [attr.aria-label]="module.handlerData.a11yTitle + ', ' + modNameTranslated">
|
||||
</core-format-text>
|
||||
</h2>
|
||||
</p>
|
||||
<ion-badge
|
||||
*ngIf="module.handlerData.extraBadge"
|
||||
[color]="module.handlerData.extraBadgeColor"
|
||||
|
|
|
@ -18,8 +18,10 @@
|
|||
|
||||
<ion-icon name="fas-folder" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>
|
||||
<h2><core-format-text [text]="section.name" contextLevel="course" [contextInstanceId]="course?.id">
|
||||
</core-format-text></h2>
|
||||
<p class="item-heading">
|
||||
<core-format-text [text]="section.name" contextLevel="course" [contextInstanceId]="course?.id">
|
||||
</core-format-text>
|
||||
</p>
|
||||
<core-progress-bar *ngIf="section.progress >= 0" [progress]="section.progress"
|
||||
a11yText="core.course.aria:sectionprogress">
|
||||
</core-progress-bar>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
button>
|
||||
<ion-icon name="fas-graduation-cap" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>
|
||||
<h2>{{ item.courseName }}</h2>
|
||||
<p class="item-heading">{{ item.courseName }}</p>
|
||||
<p *ngIf="item.categoryName">{{ 'core.category' | translate }}: {{ item.categoryName }}</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
[courseId]="isEnrolled ? course.id : null">
|
||||
</core-user-avatar>
|
||||
<ion-label>
|
||||
<h2>{{contact.fullname}}</h2>
|
||||
<p class="item-heading">{{contact.fullname}}</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
<core-spacer></core-spacer>
|
||||
|
@ -83,7 +83,7 @@
|
|||
<div *ngIf="!isEnrolled" detail="false">
|
||||
<ion-item class="ion-text-wrap" *ngFor="let instance of selfEnrolInstances">
|
||||
<ion-label>
|
||||
<h2>{{ instance.name }}</h2>
|
||||
<p class="item-heading">{{ instance.name }}</p>
|
||||
<ion-button expand="block" class="ion-margin-top" (click)="selfEnrolClicked(instance.id)">
|
||||
{{ 'core.courses.enrolme' | translate }}
|
||||
</ion-button>
|
||||
|
|
|
@ -24,13 +24,13 @@
|
|||
</core-format-text>
|
||||
</span>
|
||||
</p>
|
||||
<h2>
|
||||
<p class="item-heading">
|
||||
<ion-icon name="fas-star" *ngIf="course.isfavourite" [attr.aria-label]="'core.courses.favourite' | translate">
|
||||
</ion-icon>
|
||||
<span class="sr-only" *ngIf="course.isfavourite">{{ 'core.courses.aria:favourite' | translate }}</span>
|
||||
<span class="sr-only">{{ 'core.courses.aria:coursename' | translate }}</span>
|
||||
<core-format-text [text]="course.fullname" contextLevel="course" [contextInstanceId]="course.id"></core-format-text>
|
||||
</h2>
|
||||
</p>
|
||||
</ion-label>
|
||||
|
||||
<div class="core-button-spinner" *ngIf="downloadCourseEnabled && !courseOptionMenuEnabled && showDownload" slot="end">
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
margin: 5px 0;
|
||||
flex-grow: 1;
|
||||
|
||||
h2 ion-icon {
|
||||
.item-heading ion-icon {
|
||||
margin-right: 4px;
|
||||
color: var(--core-star-color);
|
||||
}
|
||||
|
@ -99,7 +99,7 @@
|
|||
.core-course-title {
|
||||
margin: 3px 0;
|
||||
|
||||
h2 ion-icon {
|
||||
.item-heading ion-icon {
|
||||
margin-right: 2px;
|
||||
}
|
||||
|
||||
|
|
|
@ -169,7 +169,7 @@
|
|||
<!-- Other categories. -->
|
||||
<ng-container *ngFor="let category of categories">
|
||||
<ion-item-divider class="ion-text-wrap">
|
||||
<ion-label><h3>{{ category.name }}</h3></ion-label>
|
||||
<ion-label><p class="item-heading">{{ category.name }}</p></ion-label>
|
||||
</ion-item-divider>
|
||||
<core-user-profile-field *ngFor="let field of category.fields" [field]="field" [edit]="true" [signup]="true"
|
||||
registerAuth="email" [form]="signupForm"></core-user-profile-field>
|
||||
|
|
|
@ -19,9 +19,9 @@
|
|||
<img *ngIf="!logoUrl" src="assets/img/login_logo.png" role="presentation" alt="">
|
||||
</div>
|
||||
|
||||
<h6 *ngIf="siteName" class="ion-padding core-sitename">
|
||||
<p *ngIf="siteName" class="ion-padding core-sitename">
|
||||
<core-format-text [text]="siteName" [filter]="false"></core-format-text>
|
||||
</h6>
|
||||
</p>
|
||||
<p class="core-siteurl">{{siteUrl}}</p>
|
||||
|
||||
<ion-item *ngIf="!isLoggedOut" class="ion-text-center core-login-reconnect-warning" lines="none">
|
||||
|
|
|
@ -128,7 +128,7 @@
|
|||
<img src="assets/icon/icon.png" *ngIf="!site.imageurl" class="core-login-default-icon" alt="" role="presentation">
|
||||
</ion-thumbnail>
|
||||
<ion-label>
|
||||
<h2 *ngIf="site.title" class="ion-text-wrap">{{site.title}}</h2>
|
||||
<p *ngIf="site.title" class="item-heading ion-text-wrap">{{site.title}}</p>
|
||||
<p *ngIf="site.noProtocolUrl">{{site.noProtocolUrl}}</p>
|
||||
<p *ngIf="site.location">{{site.location}}</p>
|
||||
</ion-label>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
alt="{{ 'core.pictureof' | translate:{$a: site.fullName} }}" onError="this.src='assets/img/user-avatar.png'">
|
||||
</ion-avatar>
|
||||
<ion-label>
|
||||
<h2>{{site.fullName}}</h2>
|
||||
<p class="item-heading">{{site.fullName}}</p>
|
||||
<p><core-format-text [text]="site.siteName" clean="true" [siteId]="site.id"></core-format-text></p>
|
||||
<p>{{site.siteUrl}}</p>
|
||||
</ion-label>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
(click)="openHandler(handler)" [attr.aria-label]="handler.title | translate" detail="true" detail="true">
|
||||
<ion-icon [name]="handler.icon" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>
|
||||
<h2>{{ handler.title | translate}}</h2>
|
||||
<p class="item-heading">{{ handler.title | translate}}</p>
|
||||
</ion-label>
|
||||
<ion-badge slot="end" *ngIf="handler.showBadge" [hidden]="handler.loading || !handler.badge" aria-hidden="true">
|
||||
{{handler.badge}}
|
||||
|
@ -43,54 +43,54 @@
|
|||
[capture]="item.type == 'app'" [inApp]="item.type == 'inappbrowser'" class="core-moremenu-customitem" detail="true">
|
||||
<ion-icon [name]="item.icon" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>
|
||||
<h2>{{item.label}}</h2>
|
||||
<p class="item-heading">{{item.label}}</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
<ion-item button *ngIf="item.type == 'embedded'" (click)="openItem(item)" [attr.aria-label]="item.label"
|
||||
class="core-moremenu-customitem" detail="true">
|
||||
<ion-icon [name]="item.icon" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>
|
||||
<h2>{{item.label}}</h2>
|
||||
<p class="item-heading">{{item.label}}</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
</ng-container>
|
||||
<ion-item button *ngIf="showScanQR" (click)="scanQR()" detail="true">
|
||||
<ion-icon name="fas-qrcode" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>
|
||||
<h2>{{ 'core.scanqr' | translate }}</h2>
|
||||
<p class="item-heading">{{ 'core.scanqr' | translate }}</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
<ion-item button *ngIf="showWeb && siteInfo" [href]="siteInfo.siteurl" core-link autoLogin="yes"
|
||||
[attr.aria-label]="'core.mainmenu.website' | translate" detail="true">
|
||||
<ion-icon name="fas-globe" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>
|
||||
<h2>{{ 'core.mainmenu.website' | translate }}</h2>
|
||||
<p class="item-heading">{{ 'core.mainmenu.website' | translate }}</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
<ion-item button *ngIf="showHelp" [href]="docsUrl" core-link autoLogin="no"
|
||||
[attr.aria-label]="'core.mainmenu.help' | translate" detail="true">
|
||||
<ion-icon name="far-life-ring" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>
|
||||
<h2>{{ 'core.mainmenu.help' | translate }}</h2>
|
||||
<p class="item-heading">{{ 'core.mainmenu.help' | translate }}</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
<ion-item button (click)="openPreferences()" [attr.aria-label]="'core.settings.preferences' | translate" detail="true">
|
||||
<ion-icon name="fas-wrench" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>
|
||||
<h2>{{ 'core.settings.preferences' | translate }}</h2>
|
||||
<p class="item-heading">{{ 'core.settings.preferences' | translate }}</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
<ion-item button (click)="logout()" [attr.aria-label]="logoutLabel | translate" detail="true">
|
||||
<ion-icon name="fas-sign-out-alt" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>
|
||||
<h2>{{ logoutLabel | translate }}</h2>
|
||||
<p class="item-heading">{{ logoutLabel | translate }}</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
<core-spacer></core-spacer>
|
||||
<ion-item button (click)="openSettings()" [attr.aria-label]="'core.settings.appsettings' | translate" detail="true">
|
||||
<ion-icon name="fas-cogs" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>
|
||||
<h2>{{ 'core.settings.appsettings' | translate }}</h2>
|
||||
<p class="item-heading">{{ 'core.settings.appsettings' | translate }}</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
</ion-list>
|
||||
|
|
|
@ -20,14 +20,14 @@
|
|||
<ng-container *ngIf="!error">
|
||||
<ion-item *ngFor="let license of licenses" class="ion-text-wrap">
|
||||
<ion-label>
|
||||
<h2>
|
||||
<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 }}
|
||||
</h2>
|
||||
<h3 *ngIf="license.publisher">
|
||||
</p>
|
||||
<p class="item-heading" *ngIf="license.publisher">
|
||||
{{ 'core.settings.publisher' | translate }}{{ 'core.labelsep' | translate }} {{ license.publisher }}
|
||||
</h3>
|
||||
</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
|
||||
|
|
|
@ -20,9 +20,9 @@
|
|||
<core-loading [hideUntil]="loaded">
|
||||
<ion-item *ngFor="let site of sites" [attr.aria-current]="site.id == currentSiteId ? 'page' : 'false'">
|
||||
<ion-label class="ion-text-wrap">
|
||||
<h2>
|
||||
<p class="item-heading">
|
||||
<core-format-text [text]="site.siteName" clean="true" [siteId]="site.id"></core-format-text>
|
||||
</h2>
|
||||
</p>
|
||||
<p class="ion-text-wrap">{{ site.fullName }}</p>
|
||||
<p>{{ site.siteUrl }}</p>
|
||||
</ion-label>
|
||||
|
|
|
@ -32,9 +32,9 @@
|
|||
</ion-item-divider>
|
||||
<ion-item *ngFor="let site of sites" [attr.aria-current]="site.id == currentSiteId ? 'page' : 'false'" class="ion-text-wrap">
|
||||
<ion-label>
|
||||
<h2>
|
||||
<p class="item-heading">
|
||||
<core-format-text [text]="site.siteName" clean="true" [siteId]="site.id"></core-format-text>
|
||||
</h2>
|
||||
</p>
|
||||
<p>{{ site.fullName }}</p>
|
||||
<p>{{ site.siteUrl }}</p>
|
||||
</ion-label>
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
onError="this.src='assets/img/user-avatar.png'">
|
||||
</ion-avatar>
|
||||
<ion-label>
|
||||
<h2>{{site.fullName}}</h2>
|
||||
<p class="item-heading">{{site.fullName}}</p>
|
||||
<p><core-format-text clean="true" [text]="site.siteName" [siteId]="site.id"></core-format-text></p>
|
||||
<p>{{site.siteUrl}}</p>
|
||||
</ion-label>
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<ion-label>
|
||||
<ng-container *ngIf="!searchQuery">
|
||||
<h2>{{ participant.fullname }}</h2>
|
||||
<p class="item-heading">{{ participant.fullname }}</p>
|
||||
<p *ngIf="participant.lastcourseaccess">
|
||||
<strong>{{ 'core.lastaccess' | translate }}: </strong>
|
||||
{{ participant.lastcourseaccess | coreTimeAgo }}
|
||||
|
@ -48,10 +48,10 @@
|
|||
</ng-container>
|
||||
|
||||
<ng-container *ngIf="searchQuery">
|
||||
<h2>
|
||||
<p class="item-heading">
|
||||
<core-format-text [text]="participant.fullname" [highlight]="searchQuery" [filter]="false">
|
||||
</core-format-text>
|
||||
</h2>
|
||||
</p>
|
||||
</ng-container>
|
||||
</ion-label>
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
[attr.aria-label]="'core.user.details' | translate" detail="true">
|
||||
<ion-icon name="fa-user" slot="start" aria-hidden="true"></ion-icon>
|
||||
<ion-label>
|
||||
<h2>{{ 'core.user.details' | translate }}</h2>
|
||||
<p class="item-heading">{{ 'core.user.details' | translate }}</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
<ion-item class="ion-text-center core-loading-handlers" *ngIf="isLoadingHandlers">
|
||||
|
@ -69,7 +69,7 @@
|
|||
[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>
|
||||
<h2>{{ handler.title | translate }}</h2>
|
||||
<p class="item-heading">{{ handler.title | translate }}</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
|
||||
|
|
|
@ -150,7 +150,7 @@
|
|||
h1 {
|
||||
font-size: 3rem;
|
||||
}
|
||||
h2 {
|
||||
h2, .item-heading {
|
||||
font-size: 2.8rem;
|
||||
}
|
||||
h3 {
|
||||
|
@ -226,7 +226,7 @@
|
|||
}
|
||||
|
||||
.ion-text-wrap ion-label {
|
||||
h2, p {
|
||||
.item-heading, h2, p {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
|
|
|
@ -49,6 +49,11 @@
|
|||
.font-lg { font-size: 1.7rem; }
|
||||
.font-sm { font-size: 1.2rem; }
|
||||
|
||||
.item-heading {
|
||||
font-size: 16px !important;
|
||||
color: initial !important;
|
||||
}
|
||||
|
||||
// Correctly inherit ion-text-wrap onto labels.
|
||||
ion-item.ion-text-wrap ion-label {
|
||||
white-space: normal !important;
|
||||
|
|
Loading…
Reference in New Issue