forked from EVOgeek/Vmeda.Online
		
	
						commit
						32055bd8d5
					
				| @ -18,7 +18,7 @@ | |||||||
|     <core-loading [hideUntil]="loaded"> |     <core-loading [hideUntil]="loaded"> | ||||||
|         <ion-item *ngIf="showMyEntriesToggle"> |         <ion-item *ngIf="showMyEntriesToggle"> | ||||||
|             <ion-label>{{ 'addon.blog.showonlyyourentries' | translate }}</ion-label> |             <ion-label>{{ 'addon.blog.showonlyyourentries' | translate }}</ion-label> | ||||||
|             <ion-toggle [(ngModel)]="onlyMyEntries" (ionChange)="onlyMyEntriesToggleChanged(onlyMyEntries)"></ion-toggle> |             <ion-toggle [(ngModel)]="onlyMyEntries" (ionChange)="onlyMyEntriesToggleChanged(onlyMyEntries)" slot="end"></ion-toggle> | ||||||
|         </ion-item> |         </ion-item> | ||||||
|         <core-empty-box *ngIf="entries && entries.length == 0" icon="far-newspaper" [message]="'addon.blog.noentriesyet' | translate"> |         <core-empty-box *ngIf="entries && entries.length == 0" icon="far-newspaper" [message]="'addon.blog.noentriesyet' | translate"> | ||||||
|         </core-empty-box> |         </core-empty-box> | ||||||
|  | |||||||
| @ -363,7 +363,7 @@ | |||||||
|                             <p class="item-heading">{{ 'addon.mod_assign.groupsubmissionsettings' | translate }}</p> |                             <p class="item-heading">{{ 'addon.mod_assign.groupsubmissionsettings' | translate }}</p> | ||||||
|                             <p>{{ 'addon.mod_assign.applytoteam' | translate }}</p> |                             <p>{{ 'addon.mod_assign.applytoteam' | translate }}</p> | ||||||
|                         </ion-label> |                         </ion-label> | ||||||
|                         <ion-toggle [(ngModel)]="grade.applyToAll"></ion-toggle> |                         <ion-toggle [(ngModel)]="grade.applyToAll" slot="end"></ion-toggle> | ||||||
|                     </ion-item> |                     </ion-item> | ||||||
| 
 | 
 | ||||||
|                     <!-- Attempt status. --> |                     <!-- Attempt status. --> | ||||||
| @ -387,7 +387,7 @@ | |||||||
|                         </ion-item> |                         </ion-item> | ||||||
|                         <ion-item *ngIf="canSaveGrades && allowAddAttempt"> |                         <ion-item *ngIf="canSaveGrades && allowAddAttempt"> | ||||||
|                             <ion-label>{{ 'addon.mod_assign.addattempt' | translate }}</ion-label> |                             <ion-label>{{ 'addon.mod_assign.addattempt' | translate }}</ion-label> | ||||||
|                             <ion-toggle [(ngModel)]="grade.addAttempt"></ion-toggle> |                             <ion-toggle [(ngModel)]="grade.addAttempt" slot="end"></ion-toggle> | ||||||
|                         </ion-item> |                         </ion-item> | ||||||
|                     </ng-container> |                     </ng-container> | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -19,7 +19,7 @@ | |||||||
| 
 | 
 | ||||||
|             <ion-item> |             <ion-item> | ||||||
|                 <ion-label>{{ 'addon.mod_chat.showincompletesessions' | translate }}</ion-label> |                 <ion-label>{{ 'addon.mod_chat.showincompletesessions' | translate }}</ion-label> | ||||||
|                 <ion-toggle [(ngModel)]="showAll" (ionChange)="reloadSessions()"></ion-toggle> |                 <ion-toggle [(ngModel)]="showAll" (ionChange)="reloadSessions()" slot="end"></ion-toggle> | ||||||
|             </ion-item> |             </ion-item> | ||||||
| 
 | 
 | ||||||
|             <ion-card *ngFor="let session of sessions.items" (click)="sessions.select(session)" button |             <ion-card *ngFor="let session of sessions.items" (click)="sessions.select(session)" button | ||||||
|  | |||||||
| @ -13,7 +13,7 @@ | |||||||
| <ion-content> | <ion-content> | ||||||
|     <ion-item> |     <ion-item> | ||||||
|         <ion-label>{{ 'addon.mod_data.advancedsearch' | translate }}</ion-label> |         <ion-label>{{ 'addon.mod_data.advancedsearch' | translate }}</ion-label> | ||||||
|         <ion-toggle [(ngModel)]="search.searchingAdvanced"></ion-toggle> |         <ion-toggle [(ngModel)]="search.searchingAdvanced" slot="end"></ion-toggle> | ||||||
|     </ion-item> |     </ion-item> | ||||||
|     <form (ngSubmit)="searchEntries($event)" [formGroup]="searchForm" #searchFormEl> |     <form (ngSubmit)="searchEntries($event)" [formGroup]="searchForm" #searchFormEl> | ||||||
|         <ion-list class="ion-no-margin"> |         <ion-list class="ion-no-margin"> | ||||||
|  | |||||||
| @ -43,7 +43,7 @@ | |||||||
|             <div *ngIf="advanced" id="addon-mod-forum-new-discussion-advanced"> |             <div *ngIf="advanced" id="addon-mod-forum-new-discussion-advanced"> | ||||||
|                 <ion-item *ngIf="showGroups && groupIds.length > 1 && accessInfo.cancanposttomygroups"> |                 <ion-item *ngIf="showGroups && groupIds.length > 1 && accessInfo.cancanposttomygroups"> | ||||||
|                     <ion-label>{{ 'addon.mod_forum.posttomygroups' | translate }}</ion-label> |                     <ion-label>{{ 'addon.mod_forum.posttomygroups' | translate }}</ion-label> | ||||||
|                     <ion-toggle [(ngModel)]="newDiscussion.postToAllGroups" name="postallgroups"></ion-toggle> |                     <ion-toggle [(ngModel)]="newDiscussion.postToAllGroups" name="postallgroups" slot="end"></ion-toggle> | ||||||
|                 </ion-item> |                 </ion-item> | ||||||
|                 <ion-item *ngIf="showGroups" class="core-edit-set-group"> |                 <ion-item *ngIf="showGroups" class="core-edit-set-group"> | ||||||
|                     <ion-label>{{ 'addon.mod_forum.group' | translate }}</ion-label> |                     <ion-label>{{ 'addon.mod_forum.group' | translate }}</ion-label> | ||||||
| @ -58,11 +58,11 @@ | |||||||
|                 </ion-item> |                 </ion-item> | ||||||
|                 <ion-item> |                 <ion-item> | ||||||
|                     <ion-label>{{ 'addon.mod_forum.discussionsubscription' | translate }}</ion-label> |                     <ion-label>{{ 'addon.mod_forum.discussionsubscription' | translate }}</ion-label> | ||||||
|                     <ion-toggle [(ngModel)]="newDiscussion.subscribe" name="subscribe"></ion-toggle> |                     <ion-toggle [(ngModel)]="newDiscussion.subscribe" name="subscribe" slot="end"></ion-toggle> | ||||||
|                 </ion-item> |                 </ion-item> | ||||||
|                 <ion-item *ngIf="canPin"> |                 <ion-item *ngIf="canPin"> | ||||||
|                     <ion-label>{{ 'addon.mod_forum.discussionpinned' | translate }}</ion-label> |                     <ion-label>{{ 'addon.mod_forum.discussionpinned' | translate }}</ion-label> | ||||||
|                     <ion-toggle [(ngModel)]="newDiscussion.pin" name="pin"></ion-toggle> |                     <ion-toggle [(ngModel)]="newDiscussion.pin" name="pin" slot="end"></ion-toggle> | ||||||
|                 </ion-item> |                 </ion-item> | ||||||
|                 <core-attachments *ngIf="canCreateAttachments && forum && forum.maxattachments > 0" [files]="newDiscussion.files" |                 <core-attachments *ngIf="canCreateAttachments && forum && forum.maxattachments > 0" [files]="newDiscussion.files" | ||||||
|                     [maxSize]="forum.maxbytes" [maxSubmissions]="forum.maxattachments" [component]="component" [componentId]="forum.cmid" |                     [maxSize]="forum.maxbytes" [maxSubmissions]="forum.maxattachments" [component]="component" [componentId]="forum.cmid" | ||||||
|  | |||||||
| @ -62,16 +62,16 @@ | |||||||
|                 </ion-item-divider> |                 </ion-item-divider> | ||||||
|                 <ion-item class="ion-text-wrap"> |                 <ion-item class="ion-text-wrap"> | ||||||
|                     <ion-label>{{ 'addon.mod_glossary.entryusedynalink' | translate }}</ion-label> |                     <ion-label>{{ 'addon.mod_glossary.entryusedynalink' | translate }}</ion-label> | ||||||
|                     <ion-toggle [(ngModel)]="data.usedynalink" name="usedynalink"></ion-toggle> |                     <ion-toggle [(ngModel)]="data.usedynalink" name="usedynalink" slot="end"></ion-toggle> | ||||||
|                 </ion-item> |                 </ion-item> | ||||||
|                 <ion-item class="ion-text-wrap"> |                 <ion-item class="ion-text-wrap"> | ||||||
|                     <ion-label>{{ 'addon.mod_glossary.casesensitive' | translate }}</ion-label> |                     <ion-label>{{ 'addon.mod_glossary.casesensitive' | translate }}</ion-label> | ||||||
|                     <ion-toggle [disabled]="!data.usedynalink" [(ngModel)]="data.casesensitive" name="casesensitive"> |                     <ion-toggle [disabled]="!data.usedynalink" [(ngModel)]="data.casesensitive" name="casesensitive" slot="end"> | ||||||
|                     </ion-toggle> |                     </ion-toggle> | ||||||
|                 </ion-item> |                 </ion-item> | ||||||
|                 <ion-item class="ion-text-wrap"> |                 <ion-item class="ion-text-wrap"> | ||||||
|                     <ion-label>{{ 'addon.mod_glossary.fullmatch' | translate }}</ion-label> |                     <ion-label>{{ 'addon.mod_glossary.fullmatch' | translate }}</ion-label> | ||||||
|                     <ion-toggle [disabled]="!data.usedynalink" [(ngModel)]="data.fullmatch" name="fullmatch"></ion-toggle> |                     <ion-toggle [disabled]="!data.usedynalink" [(ngModel)]="data.fullmatch" name="fullmatch" slot="end"></ion-toggle> | ||||||
|                 </ion-item> |                 </ion-item> | ||||||
|             </ng-container> |             </ng-container> | ||||||
|             <ion-button class="ion-margin" expand="block" [disabled]="!data.concept || !data.definition" (click)="save()"> |             <ion-button class="ion-margin" expand="block" [disabled]="!data.concept || !data.definition" (click)="save()"> | ||||||
|  | |||||||
| @ -56,6 +56,7 @@ export class AddonModLabelModuleHandlerService extends CoreModuleHandlerBase imp | |||||||
|             title, |             title, | ||||||
|             a11yTitle: '', |             a11yTitle: '', | ||||||
|             class: 'addon-mod-label-handler', |             class: 'addon-mod-label-handler', | ||||||
|  |             hasCustomCmListItem: true, | ||||||
|         }; |         }; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -105,9 +105,11 @@ | |||||||
|                 </ion-label> |                 </ion-label> | ||||||
|             </ion-item> |             </ion-item> | ||||||
|             <ion-item class="ion-text-wrap" *ngIf="access.canpublishsubmissions"> |             <ion-item class="ion-text-wrap" *ngIf="access.canpublishsubmissions"> | ||||||
|                 <ion-label>{{ 'addon.mod_workshop.publishsubmission' | translate }}</ion-label> |                 <ion-label> | ||||||
|                 <ion-toggle formControlName="published"></ion-toggle> |                     <p class="item-heading">{{ 'addon.mod_workshop.publishsubmission' | translate }}</p> | ||||||
|                 <p class="item-help">{{ 'addon.mod_workshop.publishsubmission_help' | translate }}</p> |                     <p>{{ 'addon.mod_workshop.publishsubmission_help' | translate }}</p> | ||||||
|  |                 </ion-label> | ||||||
|  |                 <ion-toggle formControlName="published" slot="end"></ion-toggle> | ||||||
|             </ion-item> |             </ion-item> | ||||||
| 
 | 
 | ||||||
|             <ion-item class="ion-text-wrap"> |             <ion-item class="ion-text-wrap"> | ||||||
|  | |||||||
| @ -449,7 +449,14 @@ export class AddonModWorkshopHelperProvider { | |||||||
|      * @returns Promise resolved with the files. |      * @returns Promise resolved with the files. | ||||||
|      */ |      */ | ||||||
|     async applyOfflineData( |     async applyOfflineData( | ||||||
|         submission: AddonModWorkshopSubmissionDataWithOfflineData = { |         submission?: AddonModWorkshopSubmissionDataWithOfflineData, | ||||||
|  |         actions: AddonModWorkshopOfflineSubmission[] = [], | ||||||
|  |     ): Promise<AddonModWorkshopSubmissionDataWithOfflineData | undefined> { | ||||||
|  |         if (actions.length === 0) { | ||||||
|  |             return submission; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         const baseSubmission = submission ?? { | ||||||
|             id: 0, |             id: 0, | ||||||
|             workshopid: 0, |             workshopid: 0, | ||||||
|             title: '', |             title: '', | ||||||
| @ -462,12 +469,7 @@ export class AddonModWorkshopHelperProvider { | |||||||
|             attachment: 0, |             attachment: 0, | ||||||
|             published: false, |             published: false, | ||||||
|             late: 0, |             late: 0, | ||||||
|         }, |         }; | ||||||
|         actions: AddonModWorkshopOfflineSubmission[] = [], |  | ||||||
|     ): Promise<AddonModWorkshopSubmissionDataWithOfflineData | undefined> { |  | ||||||
|         if (actions.length === 0) { |  | ||||||
|             return submission; |  | ||||||
|         } |  | ||||||
| 
 | 
 | ||||||
|         let attachmentsId: CoreFileUploaderStoreFilesResult | undefined; |         let attachmentsId: CoreFileUploaderStoreFilesResult | undefined; | ||||||
|         const workshopId = actions[0].workshopid; |         const workshopId = actions[0].workshopid; | ||||||
| @ -476,17 +478,17 @@ export class AddonModWorkshopHelperProvider { | |||||||
|             switch (action.action) { |             switch (action.action) { | ||||||
|                 case AddonModWorkshopAction.ADD: |                 case AddonModWorkshopAction.ADD: | ||||||
|                 case AddonModWorkshopAction.UPDATE: |                 case AddonModWorkshopAction.UPDATE: | ||||||
|                     submission.title = action.title; |                     baseSubmission.title = action.title; | ||||||
|                     submission.content = action.content; |                     baseSubmission.content = action.content; | ||||||
|                     submission.title = action.title; |                     baseSubmission.title = action.title; | ||||||
|                     submission.courseid = action.courseid; |                     baseSubmission.courseid = action.courseid; | ||||||
|                     submission.submissionmodified = action.timemodified / 1000; |                     baseSubmission.submissionmodified = action.timemodified / 1000; | ||||||
|                     submission.offline = true; |                     baseSubmission.offline = true; | ||||||
|                     attachmentsId = action.attachmentsid as CoreFileUploaderStoreFilesResult; |                     attachmentsId = action.attachmentsid as CoreFileUploaderStoreFilesResult; | ||||||
|                     break; |                     break; | ||||||
|                 case AddonModWorkshopAction.DELETE: |                 case AddonModWorkshopAction.DELETE: | ||||||
|                     submission.deleted = true; |                     baseSubmission.deleted = true; | ||||||
|                     submission.submissionmodified = action.timemodified / 1000; |                     baseSubmission.submissionmodified = action.timemodified / 1000; | ||||||
|                     break; |                     break; | ||||||
|                 default: |                 default: | ||||||
|             } |             } | ||||||
| @ -494,13 +496,13 @@ export class AddonModWorkshopHelperProvider { | |||||||
| 
 | 
 | ||||||
|         // Check offline files for latest attachmentsid.
 |         // Check offline files for latest attachmentsid.
 | ||||||
|         if (attachmentsId) { |         if (attachmentsId) { | ||||||
|             submission.attachmentfiles = |             baseSubmission.attachmentfiles = | ||||||
|                 await this.getSubmissionFilesFromOfflineFilesObject(attachmentsId, workshopId); |                 await this.getSubmissionFilesFromOfflineFilesObject(attachmentsId, workshopId); | ||||||
|         } else { |         } else { | ||||||
|             submission.attachmentfiles = []; |             baseSubmission.attachmentfiles = []; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         return submission; |         return baseSubmission; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|  | |||||||
| @ -49,13 +49,14 @@ Feature: Test basic usage of workshop activity in app | |||||||
|     Given I entered the workshop activity "workshop" on course "Course 1" as "student1" in the app |     Given I entered the workshop activity "workshop" on course "Course 1" as "student1" in the app | ||||||
|     Then I should find "Task to do" within "Submit your work" "ion-item" in the app |     Then I should find "Task to do" within "Submit your work" "ion-item" in the app | ||||||
| 
 | 
 | ||||||
|     When I press "Edit submission" in the app |     When I press "Add submission" in the app | ||||||
|     And I set the field "Title" to "The Answer" in the app |     And I set the field "Title" to "The Answer" in the app | ||||||
|     And I set the field "Submission content" to "42" in the app |     And I set the field "Submission content" to "42" in the app | ||||||
|     And I press "Save" in the app |     And I press "Save" in the app | ||||||
|     Then I should find "Task done" within "Submit your work" "ion-item" in the app |     Then I should find "Task done" within "Submit your work" "ion-item" in the app | ||||||
|     And I should find "The Answer" in the app |     And I should find "The Answer" in the app | ||||||
|     And I should find "42" in the app |     And I should find "42" in the app | ||||||
|  |     And I should find "Edit submission" in the app | ||||||
| 
 | 
 | ||||||
|     Given I entered the workshop activity "workshop" on course "Course 1" as "teacher1" in the app |     Given I entered the workshop activity "workshop" on course "Course 1" as "teacher1" in the app | ||||||
|     When I pull to refresh in the app |     When I pull to refresh in the app | ||||||
|  | |||||||
| @ -45,6 +45,7 @@ export class CoreModuleHandlerBase implements Partial<CoreCourseModuleHandler> { | |||||||
|             title: module.name, |             title: module.name, | ||||||
|             class: 'addon-mod_' + module.modname + '-handler', |             class: 'addon-mod_' + module.modname + '-handler', | ||||||
|             showDownloadButton: true, |             showDownloadButton: true, | ||||||
|  |             hasCustomCmListItem: false, | ||||||
|             action: async ( |             action: async ( | ||||||
|                 event: Event, |                 event: Event, | ||||||
|                 module: CoreCourseModuleData, |                 module: CoreCourseModuleData, | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| <ion-card *ngIf="module.handlerData && module.visibleoncoursepage !== 0" | <ion-card *ngIf="module.handlerData && module.visibleoncoursepage !== 0" | ||||||
|     class="activity-card core-course-module-handler {{module.handlerData.class}}" [class.core-course-module-with-view]="moduleHasView" |     class="activity-card core-course-module-handler {{module.handlerData.class}}" [class.core-course-module-with-view]="moduleHasView" | ||||||
|     [class.item-dimmed]="module.visible === 0 || module.uservisible === false" (click)="moduleClicked($event)" |     [class.item-dimmed]="module.visible === 0 || module.uservisible === false" [class.activityinline]="activityInline" | ||||||
|     [button]="module.handlerData.action && module.uservisible" |     (click)="moduleClicked($event)" [button]="module.handlerData.action && module.uservisible" | ||||||
|     [attr.aria-label]="module.handlerData.a11yTitle ? module.handlerData.a11yTitle : null" id="core-course-module-{{module.id}}"> |     [attr.aria-label]="module.handlerData.a11yTitle ? module.handlerData.a11yTitle : null" id="core-course-module-{{module.id}}"> | ||||||
|     <ng-container *ngIf="!module.handlerData.loading"> |     <ng-container *ngIf="!module.handlerData.loading"> | ||||||
|         <ion-item class="ion-text-wrap"> |         <ion-item class="ion-text-wrap"> | ||||||
|  | |||||||
| @ -7,6 +7,10 @@ | |||||||
| 
 | 
 | ||||||
|     ion-card { |     ion-card { | ||||||
|         margin: var(--vertical-margin) var(--horizontal-margin); |         margin: var(--vertical-margin) var(--horizontal-margin); | ||||||
|  | 
 | ||||||
|  |         &.activityinline { | ||||||
|  |             border: 0px; | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     ion-item { |     ion-item { | ||||||
| @ -94,7 +98,8 @@ | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     .core-module-description ::ng-deep img { |     .core-module-description ::ng-deep img, | ||||||
|  |     .activity-title .item-heading core-format-text ::ng-deep img { | ||||||
|         border-radius: var(--radius-lg); |         border-radius: var(--radius-lg); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -185,4 +190,9 @@ | |||||||
|     &.indented + ::ng-deep core-course-module.indented ion-card { |     &.indented + ::ng-deep core-course-module.indented ion-card { | ||||||
|         border-top: 1px solid var(--border-color); |         border-top: 1px solid var(--border-color); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     // Hide download folder icon meanwhile MOBILE-4147 is not solved | ||||||
|  |     core-format-text.core-module-description ::ng-deep .description-inner .navitem { | ||||||
|  |         display: none; | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -65,6 +65,7 @@ export class CoreCourseModuleComponent implements OnInit, OnDestroy { | |||||||
|     prefetchStatusIcon$ = new BehaviorSubject<string>(''); // Module prefetch status icon.
 |     prefetchStatusIcon$ = new BehaviorSubject<string>(''); // Module prefetch status icon.
 | ||||||
|     prefetchStatusText$ = new BehaviorSubject<string>(''); // Module prefetch status text.
 |     prefetchStatusText$ = new BehaviorSubject<string>(''); // Module prefetch status text.
 | ||||||
|     moduleHasView = true; |     moduleHasView = true; | ||||||
|  |     activityInline = false; | ||||||
| 
 | 
 | ||||||
|     protected prefetchHandler?: CoreCourseModulePrefetchHandler; |     protected prefetchHandler?: CoreCourseModulePrefetchHandler; | ||||||
| 
 | 
 | ||||||
| @ -101,6 +102,18 @@ export class CoreCourseModuleComponent implements OnInit, OnDestroy { | |||||||
|         this.module.handlerData.a11yTitle = this.module.handlerData.a11yTitle ?? this.module.handlerData.title; |         this.module.handlerData.a11yTitle = this.module.handlerData.a11yTitle ?? this.module.handlerData.title; | ||||||
|         this.moduleHasView = CoreCourse.moduleHasView(this.module); |         this.moduleHasView = CoreCourse.moduleHasView(this.module); | ||||||
| 
 | 
 | ||||||
|  |         if ( | ||||||
|  |             this.module.handlerData.hasCustomCmListItem && | ||||||
|  |             (!this.showAvailability || !this.module.availabilityinfo) && | ||||||
|  |             (!this.showCompletion || !this.hasCompletion) && | ||||||
|  |             (!this.showActivityDates || !this.module.dates?.length) && | ||||||
|  |             !this.module.groupmode && | ||||||
|  |             !(this.module.visible === 0) && | ||||||
|  |             !(this.module.visible !== 0 && this.module.isStealth) | ||||||
|  |         ) { | ||||||
|  |             this.activityInline = true; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         if (this.showDownloadStatus && this.module.handlerData.showDownloadButton) { |         if (this.showDownloadStatus && this.module.handlerData.showDownloadButton) { | ||||||
|             const status = await CoreCourseModulePrefetchDelegate.getModuleStatus(this.module, this.module.course); |             const status = await CoreCourseModulePrefetchDelegate.getModuleStatus(this.module, this.module.course); | ||||||
|             this.updateModuleStatus(status); |             this.updateModuleStatus(status); | ||||||
|  | |||||||
| @ -1784,6 +1784,7 @@ export type CoreCourseGetContentsWSModule = { | |||||||
|     completion?: CoreCourseModuleCompletionTracking; // Type of completion tracking: 0 means none, 1 manual, 2 automatic.
 |     completion?: CoreCourseModuleCompletionTracking; // Type of completion tracking: 0 means none, 1 manual, 2 automatic.
 | ||||||
|     completiondata?: CoreCourseModuleWSCompletionData; // Module completion data.
 |     completiondata?: CoreCourseModuleWSCompletionData; // Module completion data.
 | ||||||
|     contents?: CoreCourseModuleContentFile[]; |     contents?: CoreCourseModuleContentFile[]; | ||||||
|  |     groupmode?: number; // @since 4.3. Group mode value
 | ||||||
|     downloadcontent?: number; // @since 4.0 The download content value.
 |     downloadcontent?: number; // @since 4.0 The download content value.
 | ||||||
|     dates?: { |     dates?: { | ||||||
|         label: string; |         label: string; | ||||||
|  | |||||||
| @ -168,6 +168,14 @@ export interface CoreCourseModuleHandlerData { | |||||||
|      */ |      */ | ||||||
|     showDownloadButton?: boolean; |     showDownloadButton?: boolean; | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * Wether activity has the custom cmlist item flag enabled. | ||||||
|  |      * | ||||||
|  |      * Activities like label uses this flag to indicate that it should be | ||||||
|  |      * displayed as a custom course item instead of a tipical activity card. | ||||||
|  |      */ | ||||||
|  |     hasCustomCmListItem?: boolean; | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * The buttons to display in the module item. |      * The buttons to display in the module item. | ||||||
|      * |      * | ||||||
|  | |||||||
| @ -22,19 +22,20 @@ | |||||||
|                 <p class="item-heading">Text direction</p> |                 <p class="item-heading">Text direction</p> | ||||||
|                 <p>{{ direction }}</p> |                 <p>{{ direction }}</p> | ||||||
|             </ion-label> |             </ion-label> | ||||||
|             <ion-toggle [(ngModel)]="rtl" (ionChange)="RTLChanged()"></ion-toggle> |             <ion-toggle [(ngModel)]="rtl" (ionChange)="RTLChanged()" slot="end"></ion-toggle> | ||||||
|         </ion-item> |         </ion-item> | ||||||
|         <ion-item class="ion-text-wrap"> |         <ion-item class="ion-text-wrap"> | ||||||
|             <ion-label> |             <ion-label> | ||||||
|                 <p class="item-heading">Force safe area margins</p> |                 <p class="item-heading">Force safe area margins</p> | ||||||
|             </ion-label> |             </ion-label> | ||||||
|             <ion-toggle [(ngModel)]="forceSafeAreaMargins" (ionChange)="safeAreaChanged()"></ion-toggle> |             <ion-toggle [(ngModel)]="forceSafeAreaMargins" (ionChange)="safeAreaChanged()" slot="end"></ion-toggle> | ||||||
|         </ion-item> |         </ion-item> | ||||||
|         <ion-item class="ion-text-wrap" *ngIf="stagingSitesCount && enableStagingSites !== undefined"> |         <ion-item class="ion-text-wrap" *ngIf="stagingSitesCount && enableStagingSites !== undefined"> | ||||||
|             <ion-label> |             <ion-label> | ||||||
|                 <h2>Enable staging sites ({{stagingSitesCount}})</h2> |                 <h2>Enable staging sites ({{stagingSitesCount}})</h2> | ||||||
|             </ion-label> |             </ion-label> | ||||||
|             <ion-toggle [(ngModel)]="enableStagingSites" (ionChange)="setEnabledStagingSites($event.detail.checked)"></ion-toggle> |             <ion-toggle [(ngModel)]="enableStagingSites" (ionChange)="setEnabledStagingSites($event.detail.checked)" | ||||||
|  |                 slot="end"></ion-toggle> | ||||||
|         </ion-item> |         </ion-item> | ||||||
|         <ng-container *ngIf="siteId"> |         <ng-container *ngIf="siteId"> | ||||||
|             <ion-item class="ion-text-wrap"> |             <ion-item class="ion-text-wrap"> | ||||||
| @ -42,14 +43,14 @@ | |||||||
|                     <p class="item-heading">Enable remote styles <ion-badge>{{remoteStylesCount}}</ion-badge> |                     <p class="item-heading">Enable remote styles <ion-badge>{{remoteStylesCount}}</ion-badge> | ||||||
|                     </p> |                     </p> | ||||||
|                 </ion-label> |                 </ion-label> | ||||||
|                 <ion-toggle [(ngModel)]="remoteStyles" (ionChange)="remoteStylesChanged()"></ion-toggle> |                 <ion-toggle [(ngModel)]="remoteStyles" (ionChange)="remoteStylesChanged()" slot="end"></ion-toggle> | ||||||
|             </ion-item> |             </ion-item> | ||||||
|             <ion-item class="ion-text-wrap"> |             <ion-item class="ion-text-wrap"> | ||||||
|                 <ion-label> |                 <ion-label> | ||||||
|                     <p class="item-heading">Enable site plugin styles <ion-badge>{{pluginStylesCount}}</ion-badge> |                     <p class="item-heading">Enable site plugin styles <ion-badge>{{pluginStylesCount}}</ion-badge> | ||||||
|                     </p> |                     </p> | ||||||
|                 </ion-label> |                 </ion-label> | ||||||
|                 <ion-toggle [(ngModel)]="pluginStyles" (ionChange)="pluginStylesChanged()"></ion-toggle> |                 <ion-toggle [(ngModel)]="pluginStyles" (ionChange)="pluginStylesChanged()" slot="end"></ion-toggle> | ||||||
|             </ion-item> |             </ion-item> | ||||||
|             <ion-item class="ion-text-wrap" *ngIf="userToursEnabled"> |             <ion-item class="ion-text-wrap" *ngIf="userToursEnabled"> | ||||||
|                 <ion-label> |                 <ion-label> | ||||||
|  | |||||||
| @ -57,7 +57,7 @@ | |||||||
|                 <p class="item-heading">{{ 'core.settings.enablerichtexteditor' | translate }}</p> |                 <p class="item-heading">{{ 'core.settings.enablerichtexteditor' | translate }}</p> | ||||||
|                 <p>{{ 'core.settings.enablerichtexteditordescription' | translate }}</p> |                 <p>{{ 'core.settings.enablerichtexteditordescription' | translate }}</p> | ||||||
|             </ion-label> |             </ion-label> | ||||||
|             <ion-toggle [(ngModel)]="richTextEditor" (ionChange)="richTextEditorChanged($event)"></ion-toggle> |             <ion-toggle [(ngModel)]="richTextEditor" (ionChange)="richTextEditorChanged($event)" slot="end"></ion-toggle> | ||||||
|         </ion-item> |         </ion-item> | ||||||
|         <ion-item class="ion-text-wrap" *ngIf="displayIframeHelp"> |         <ion-item class="ion-text-wrap" *ngIf="displayIframeHelp"> | ||||||
|             <ion-label> |             <ion-label> | ||||||
| @ -73,14 +73,14 @@ | |||||||
|                 <p class="item-heading">{{ 'core.settings.debugdisplay' | translate }}</p> |                 <p class="item-heading">{{ 'core.settings.debugdisplay' | translate }}</p> | ||||||
|                 <p>{{ 'core.settings.debugdisplaydescription' | translate }}</p> |                 <p>{{ 'core.settings.debugdisplaydescription' | translate }}</p> | ||||||
|             </ion-label> |             </ion-label> | ||||||
|             <ion-toggle [(ngModel)]="debugDisplay" (ionChange)="debugDisplayChanged($event)"></ion-toggle> |             <ion-toggle [(ngModel)]="debugDisplay" (ionChange)="debugDisplayChanged($event)" slot="end"></ion-toggle> | ||||||
|         </ion-item> |         </ion-item> | ||||||
|         <ion-item class="ion-text-wrap" *ngIf="analyticsSupported"> |         <ion-item class="ion-text-wrap" *ngIf="analyticsSupported"> | ||||||
|             <ion-label> |             <ion-label> | ||||||
|                 <p class="item-heading">{{ 'core.settings.enableanalytics' | translate }}</p> |                 <p class="item-heading">{{ 'core.settings.enableanalytics' | translate }}</p> | ||||||
|                 <p>{{ 'core.settings.enableanalyticsdescription' | translate }}</p> |                 <p>{{ 'core.settings.enableanalyticsdescription' | translate }}</p> | ||||||
|             </ion-label> |             </ion-label> | ||||||
|             <ion-toggle [(ngModel)]="analyticsEnabled" (ionChange)="analyticsEnabledChanged($event)"></ion-toggle> |             <ion-toggle [(ngModel)]="analyticsEnabled" (ionChange)="analyticsEnabledChanged($event)" slot="end"></ion-toggle> | ||||||
|         </ion-item> |         </ion-item> | ||||||
|     </ion-list> |     </ion-list> | ||||||
| </ion-content> | </ion-content> | ||||||
|  | |||||||
| @ -26,7 +26,7 @@ | |||||||
|                         <p class="item-heading">{{ handler.title | translate}}</p> |                         <p class="item-heading">{{ handler.title | translate}}</p> | ||||||
|                     </ion-label> |                     </ion-label> | ||||||
|                     <ion-toggle *ngIf="handler.toggle" [(ngModel)]="handler.toggleChecked" |                     <ion-toggle *ngIf="handler.toggle" [(ngModel)]="handler.toggleChecked" | ||||||
|                         (ionChange)="handler.toggle($event.detail.checked)"> |                         (ionChange)="handler.toggle($event.detail.checked)" slot="end"> | ||||||
|                     </ion-toggle> |                     </ion-toggle> | ||||||
|                 </ion-item> |                 </ion-item> | ||||||
|             </ion-list> |             </ion-list> | ||||||
|  | |||||||
| @ -90,6 +90,7 @@ export class CoreSitePluginsModuleHandler extends CoreSitePluginsBaseHandler imp | |||||||
|             icon: CoreCourse.getModuleIconSrc(module.modname, icon), |             icon: CoreCourse.getModuleIconSrc(module.modname, icon), | ||||||
|             class: this.handlerSchema.displaydata?.class, |             class: this.handlerSchema.displaydata?.class, | ||||||
|             showDownloadButton: showDowloadButton !== undefined ? showDowloadButton : hasOffline, |             showDownloadButton: showDowloadButton !== undefined ? showDowloadButton : hasOffline, | ||||||
|  |             hasCustomCmListItem: this.handlerSchema.hascustomcmlistitem ?? false, | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|         if (this.handlerSchema.method) { |         if (this.handlerSchema.method) { | ||||||
|  | |||||||
| @ -895,6 +895,7 @@ export type CoreSitePluginsCourseModuleHandlerData = CoreSitePluginsHandlerCommo | |||||||
|     supportedfeatures?: Record<string, unknown>; |     supportedfeatures?: Record<string, unknown>; | ||||||
|     manualcompletionalwaysshown?: boolean; |     manualcompletionalwaysshown?: boolean; | ||||||
|     nolinkhandlers?: boolean; |     nolinkhandlers?: boolean; | ||||||
|  |     hascustomcmlistitem?: boolean; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  | |||||||
| @ -113,10 +113,6 @@ core-format-text { | |||||||
|         padding: 10px 0; |         padding: 10px 0; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     .btn-link { |  | ||||||
|         background: none; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @keyframes loading { | @keyframes loading { | ||||||
| @ -679,6 +675,29 @@ core-rich-text-editor .core-rte-editor { | |||||||
|             background-color: var(--#{$color-name}); |             background-color: var(--#{$color-name}); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     .btn-link { | ||||||
|  |         background: none; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     button, .btn { | ||||||
|  |         margin: 4px 8px; | ||||||
|  |         padding-left: 12px; | ||||||
|  |         padding-right: 12px; | ||||||
|  |         border-radius: var(--core-input-radius); | ||||||
|  |         a { | ||||||
|  |             color: inherit; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @each $color-name, $unused in $colors { | ||||||
|  |         .btn.btn-#{$color-name} { | ||||||
|  |             --color-base: var(--#{$color-name}); | ||||||
|  |             color: var(--#{$color-name}-shade); | ||||||
|  |             border-color: var(--color-base); | ||||||
|  |             background-color: var(--#{$color-name}-tint); | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // h1 is too big and ugly, reduce size when loading. | // h1 is too big and ugly, reduce size when loading. | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user