forked from CIT/Vmeda.Online
		
	
						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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user