Merge pull request #2855 from crazyserver/MOBILE-3320

Mobile 3320
main
Dani Palou 2021-06-29 16:11:17 +02:00 committed by GitHub
commit 00c8bd56fe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 70 additions and 65 deletions

View File

@ -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>

View 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">

View File

@ -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">

View File

@ -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>

View File

@ -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>

View File

@ -1,6 +1,5 @@
:host {
.addon-mod_h5pactivity-table-header {
--detail-icon-opacity: 0;
font-weight: bold;
}

View File

@ -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">

View File

@ -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;

View File

@ -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);
}
/**

View File

@ -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();

View File

@ -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;
}
}

View File

@ -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) {