commit
00c8bd56fe
|
@ -248,6 +248,11 @@
|
|||
<edit-config file="*-Info.plist" mode="merge" target="CFBundleShortVersionString">
|
||||
<string>3.9.5</string>
|
||||
</edit-config>
|
||||
<edit-config target="CFBundleLocalizations" file="*-Info.plist" mode="overwrite">
|
||||
<array>
|
||||
<string>en</string>
|
||||
</array>
|
||||
</edit-config>
|
||||
<config-file parent="FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED" target="*-Info.plist">
|
||||
<string>YES</string>
|
||||
</config-file>
|
||||
|
|
|
@ -2,40 +2,42 @@
|
|||
<ion-label>
|
||||
<h2>{{ 'addon.block_myoverview.pluginname' | translate }}</h2>
|
||||
</ion-label>
|
||||
<!-- Download all courses. -->
|
||||
<div *ngIf="downloadCoursesEnabled && downloadEnabled && filteredCourses.length > 1 && !showFilter" class="core-button-spinner"
|
||||
slot="end">
|
||||
<ion-button *ngIf="!prefetchCoursesData[selectedFilter].loading" fill="clear" color="dark" (click)="prefetchCourses()"
|
||||
[attr.aria-label]="'core.courses.downloadcourses' | translate">
|
||||
<ion-icon [name]="prefetchCoursesData[selectedFilter].icon" slot="icon-only" aria-hidden="true">
|
||||
</ion-icon>
|
||||
</ion-button>
|
||||
<ion-badge class="core-course-download-courses-progress" *ngIf="prefetchCoursesData[selectedFilter].badge"
|
||||
role="progressbar" [attr.aria-valuemax]="prefetchCoursesData[selectedFilter].total"
|
||||
[attr.aria-valuenow]="prefetchCoursesData[selectedFilter].count"
|
||||
[attr.aria-valuetext]="prefetchCoursesData[selectedFilter].badgeA11yText">
|
||||
{{prefetchCoursesData[selectedFilter].badge}}
|
||||
</ion-badge>
|
||||
<ion-spinner *ngIf="prefetchCoursesData[selectedFilter].loading" [attr.aria-label]="'core.loading' | translate">
|
||||
</ion-spinner>
|
||||
<div slot="end" class="flex-row">
|
||||
<!-- Download all courses. -->
|
||||
<div *ngIf="downloadCoursesEnabled && downloadEnabled && filteredCourses.length > 1 && !showFilter"
|
||||
class="core-button-spinner">
|
||||
<ion-button *ngIf="!prefetchCoursesData[selectedFilter].loading" fill="clear" color="dark" (click)="prefetchCourses()"
|
||||
[attr.aria-label]="'core.courses.downloadcourses' | translate">
|
||||
<ion-icon [name]="prefetchCoursesData[selectedFilter].icon" slot="icon-only" aria-hidden="true">
|
||||
</ion-icon>
|
||||
</ion-button>
|
||||
<ion-badge class="core-course-download-courses-progress" *ngIf="prefetchCoursesData[selectedFilter].badge"
|
||||
role="progressbar" [attr.aria-valuemax]="prefetchCoursesData[selectedFilter].total"
|
||||
[attr.aria-valuenow]="prefetchCoursesData[selectedFilter].count"
|
||||
[attr.aria-valuetext]="prefetchCoursesData[selectedFilter].badgeA11yText">
|
||||
{{prefetchCoursesData[selectedFilter].badge}}
|
||||
</ion-badge>
|
||||
<ion-spinner *ngIf="prefetchCoursesData[selectedFilter].loading" [attr.aria-label]="'core.loading' | translate">
|
||||
</ion-spinner>
|
||||
</div>
|
||||
<core-context-menu>
|
||||
<core-context-menu-item *ngIf="loaded && showFilterSwitchButton()" [priority]="1000"
|
||||
[content]="'core.courses.filtermycourses' | translate" (action)="switchFilter()" iconAction="fas-filter"
|
||||
(onClosed)="switchFilterClosed()"></core-context-menu-item>
|
||||
<core-context-menu-item *ngIf="loaded && showSortFilter" [priority]="900"
|
||||
content="{{('core.sortby' | translate) + ' ' + ('addon.block_myoverview.title' | translate)}}"
|
||||
(action)="switchSort('fullname')" [iconAction]="sort == 'fullname' ? 'far-dot-circle' : 'far-circle'">
|
||||
</core-context-menu-item>
|
||||
<core-context-menu-item *ngIf="loaded && showSortFilter && showSortByShortName" [priority]="800"
|
||||
content="{{('core.sortby' | translate) + ' ' + ('addon.block_myoverview.shortname' | translate)}}"
|
||||
(action)="switchSort('shortname')" [iconAction]="sort == 'shortname' ? 'far-dot-circle' : 'far-circle'">
|
||||
</core-context-menu-item>
|
||||
<core-context-menu-item *ngIf="loaded && showSortFilter" [priority]="700"
|
||||
content="{{('core.sortby' | translate) + ' ' + ('addon.block_myoverview.lastaccessed' | translate)}}"
|
||||
(action)="switchSort('lastaccess')" [iconAction]="sort == 'lastaccess' ? 'far-dot-circle' : 'far-circle'">
|
||||
</core-context-menu-item>
|
||||
</core-context-menu>
|
||||
</div>
|
||||
<core-context-menu slot="end">
|
||||
<core-context-menu-item *ngIf="loaded && showFilterSwitchButton()" [priority]="1000"
|
||||
[content]="'core.courses.filtermycourses' | translate" (action)="switchFilter()" iconAction="fas-filter"
|
||||
(onClosed)="switchFilterClosed()"></core-context-menu-item>
|
||||
<core-context-menu-item *ngIf="loaded && showSortFilter" [priority]="900"
|
||||
content="{{('core.sortby' | translate) + ' ' + ('addon.block_myoverview.title' | translate)}}"
|
||||
(action)="switchSort('fullname')" [iconAction]="sort == 'fullname' ? 'far-dot-circle' : 'far-circle'">
|
||||
</core-context-menu-item>
|
||||
<core-context-menu-item *ngIf="loaded && showSortFilter && showSortByShortName" [priority]="800"
|
||||
content="{{('core.sortby' | translate) + ' ' + ('addon.block_myoverview.shortname' | translate)}}"
|
||||
(action)="switchSort('shortname')" [iconAction]="sort == 'shortname' ? 'far-dot-circle' : 'far-circle'">
|
||||
</core-context-menu-item>
|
||||
<core-context-menu-item *ngIf="loaded && showSortFilter" [priority]="700"
|
||||
content="{{('core.sortby' | translate) + ' ' + ('addon.block_myoverview.lastaccessed' | translate)}}"
|
||||
(action)="switchSort('lastaccess')" [iconAction]="sort == 'lastaccess' ? 'far-dot-circle' : 'far-circle'">
|
||||
</core-context-menu-item>
|
||||
</core-context-menu>
|
||||
</ion-item-divider>
|
||||
<core-loading [hideUntil]="loaded" [fullscreen]="false" class="margin">
|
||||
<div class="safe-padding-horizontal" [hidden]="showFilter || !showSelectorFilter">
|
||||
|
|
|
@ -109,7 +109,8 @@
|
|||
|
||||
<!-- Summary of submissions with draft status. -->
|
||||
<ion-item class="ion-text-wrap" *ngIf="assign.submissiondrafts && summary && summary.submissionsenabled"
|
||||
[detail]="!showNumbers || summary.submissiondraftscount"
|
||||
[class.hide-detail]="showNumbers && !summary.submissiondraftscount"
|
||||
detail="true"
|
||||
[button]="!showNumbers || summary.submissiondraftscount"
|
||||
(click)="goToSubmissionList(submissionStatusDraft, !!summary.submissiondraftscount)">
|
||||
<ion-label><h2>{{ 'addon.mod_assign.numberofdraftsubmissions' | translate }}</h2></ion-label>
|
||||
|
@ -124,7 +125,8 @@
|
|||
|
||||
<!-- Summary of submissions with submitted status. -->
|
||||
<ion-item class="ion-text-wrap" *ngIf="summary && summary.submissionsenabled"
|
||||
[detail]="!showNumbers || summary.submissionssubmittedcount"
|
||||
[class.hide-detail]="showNumbers && !summary.submissionssubmittedcount"
|
||||
detail="true"
|
||||
[button]="!showNumbers || summary.submissionssubmittedcount"
|
||||
(click)="goToSubmissionList(submissionStatusSubmitted, !!summary.submissionssubmittedcount)">
|
||||
<ion-label><h2>{{ 'addon.mod_assign.numberofsubmittedassignments' | translate }}</h2></ion-label>
|
||||
|
@ -139,7 +141,9 @@
|
|||
|
||||
<!-- Summary of submissions that need grading. -->
|
||||
<ion-item class="ion-text-wrap" *ngIf="summary && summary.submissionsenabled && !assign.teamsubmission && showNumbers"
|
||||
[detail]="needsGradingAvailable" [button]="needsGradingAvailable"
|
||||
[class.hide-detail]="!needsGradingAvailable"
|
||||
detail="true"
|
||||
[button]="needsGradingAvailable"
|
||||
(click)="goToSubmissionList(needGrading, needsGradingAvailable)">
|
||||
<ion-label><h2>{{ 'addon.mod_assign.numberofsubmissionsneedgrading' | translate }}</h2></ion-label>
|
||||
<ion-badge slot="end" color="primary">
|
||||
|
|
|
@ -73,7 +73,9 @@
|
|||
</ion-select-option>
|
||||
</ion-select>
|
||||
</ion-item>
|
||||
<ion-item class="ion-text-wrap" (click)="openRespondents()" [detail]="access.canviewreports && completedCount > 0"
|
||||
<ion-item class="ion-text-wrap" (click)="openRespondents()"
|
||||
[class.hide-detail]="!(access.canviewreports && completedCount > 0)"
|
||||
detail="true"
|
||||
[button]="access.canviewreports && completedCount > 0">
|
||||
<ion-label>
|
||||
<h2>{{ 'addon.mod_feedback.completed_feedbacks' | translate }}</h2>
|
||||
|
|
|
@ -63,7 +63,7 @@
|
|||
<!-- Template to render a list of conversations. -->
|
||||
<ng-template #attemptsTemplate let-attempts="attempts">
|
||||
<!-- "Header" of the table -->
|
||||
<ion-item class="ion-text-wrap addon-mod_h5pactivity-table-header" detail="true">
|
||||
<ion-item class="ion-text-wrap addon-mod_h5pactivity-table-header hide-detail" detail="true">
|
||||
<ion-label>
|
||||
<ion-row class="ion-align-items-center">
|
||||
<ion-col class="ion-text-center">#</ion-col>
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
:host {
|
||||
.addon-mod_h5pactivity-table-header {
|
||||
--detail-icon-opacity: 0;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
|
|
|
@ -74,7 +74,7 @@
|
|||
</ion-card-header>
|
||||
<ion-card-content role="table">
|
||||
<!-- "Header" of the table -->
|
||||
<ion-item class="ion-text-wrap addon-mod_quiz-table-header">
|
||||
<ion-item class="ion-text-wrap addon-mod_quiz-table-header detail-hide">
|
||||
<ion-label role="rowgroup">
|
||||
<ion-row class="ion-align-items-center" role="row">
|
||||
<ion-col class="ion-text-center" *ngIf="quiz.showAttemptColumn" role="columnheader">
|
||||
|
|
|
@ -1,10 +1,6 @@
|
|||
:host {
|
||||
|
||||
.addon-mod_quiz-table {
|
||||
.addon-mod_quiz-table-header {
|
||||
--detail-icon-opacity: 0;
|
||||
}
|
||||
|
||||
ion-card-content {
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
|
|
|
@ -24,7 +24,6 @@ import { CoreStyleHandler, CoreStylesService } from '@features/styles/services/s
|
|||
import { CoreLogger } from '@singletons/logger';
|
||||
import { CoreUtils } from '@services/utils/utils';
|
||||
|
||||
const SEPARATOR_35 = /\/\*\*? *3\.5(\.0)? *styles? *\*\//i; // A comment like "/* 3.5 styles */".
|
||||
const COMPONENT = 'mmaRemoteStyles';
|
||||
|
||||
/**
|
||||
|
@ -61,7 +60,7 @@ export class AddonRemoteThemesHandlerService implements CoreStyleHandler {
|
|||
}
|
||||
|
||||
// Config received, it's a temp site.
|
||||
return await this.get35Styles(config.mobilecssurl);
|
||||
return await this.getRemoteStyles(config.mobilecssurl);
|
||||
}
|
||||
|
||||
const site = await CoreSites.getSite(siteId);
|
||||
|
@ -86,7 +85,7 @@ export class AddonRemoteThemesHandlerService implements CoreStyleHandler {
|
|||
this.logger.debug('Loading styles from: ', fileUrl);
|
||||
|
||||
// Get the CSS content using HTTP because we will treat the styles before saving them in the file.
|
||||
const style = await this.get35Styles(fileUrl);
|
||||
const style = await this.getRemoteStyles(fileUrl);
|
||||
|
||||
if (style != '') {
|
||||
// Treat the CSS.
|
||||
|
@ -99,24 +98,17 @@ export class AddonRemoteThemesHandlerService implements CoreStyleHandler {
|
|||
}
|
||||
|
||||
/**
|
||||
* Check if the CSS code has a separator for 3.5 styles. If it does, get only the styles after the separator.
|
||||
* Get styles from the url.
|
||||
*
|
||||
* @param url Url to get the code from.
|
||||
* @return The filtered styles.
|
||||
* @return The styles.
|
||||
*/
|
||||
protected async get35Styles(url?: string): Promise<string> {
|
||||
protected async getRemoteStyles(url?: string): Promise<string> {
|
||||
if (!url) {
|
||||
return '';
|
||||
}
|
||||
|
||||
const cssCode = await CoreWS.getText(url);
|
||||
|
||||
const separatorPos = cssCode.search(SEPARATOR_35);
|
||||
if (separatorPos > -1) {
|
||||
return cssCode.substr(separatorPos).replace(SEPARATOR_35, '');
|
||||
}
|
||||
|
||||
return cssCode;
|
||||
return await CoreWS.getText(url);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -284,7 +284,7 @@ core-format-text {
|
|||
|
||||
}
|
||||
|
||||
core-format-text,
|
||||
core-format-text .core-format-text-content,
|
||||
core-rich-text-editor .core-rte-editor {
|
||||
@include core-headings();
|
||||
|
||||
|
|
|
@ -148,22 +148,22 @@
|
|||
|
||||
@mixin core-headings() {
|
||||
h1 {
|
||||
font-size: 3rem;
|
||||
font-size: 26px;
|
||||
}
|
||||
h2, .item-heading {
|
||||
font-size: 2.8rem;
|
||||
font-size: 24px;
|
||||
}
|
||||
h3 {
|
||||
font-size: 2.6rem;
|
||||
font-size: 22px;
|
||||
}
|
||||
h4 {
|
||||
font-size: 2.2rem;
|
||||
font-size: 20px;
|
||||
}
|
||||
h5 {
|
||||
font-size: 1.8rem;
|
||||
font-size: 18px;
|
||||
}
|
||||
h6 {
|
||||
font-size: 1.4rem;
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -881,6 +881,11 @@ ion-datetime.datetime-disabled {
|
|||
opacity: .8 !important;
|
||||
}
|
||||
|
||||
// Hide details on items to align badges.
|
||||
ion-item.hide-detail {
|
||||
--detail-icon-opacity: 0;
|
||||
}
|
||||
|
||||
// Make links clickable when inside radio or checkbox items. Style part.
|
||||
@media (hover: hover) {
|
||||
ion-item.item-multiple-inputs:hover::part(native) {
|
||||
|
|
Loading…
Reference in New Issue