commit
						21e6b789f0
					
				@ -19,7 +19,6 @@ import { CoreCourseComponentsModule } from '@features/course/components/componen
 | 
				
			|||||||
import { AddonModQuizConnectionErrorComponent } from './connection-error/connection-error';
 | 
					import { AddonModQuizConnectionErrorComponent } from './connection-error/connection-error';
 | 
				
			||||||
import { AddonModQuizIndexComponent } from './index/index';
 | 
					import { AddonModQuizIndexComponent } from './index/index';
 | 
				
			||||||
import { AddonModQuizNavigationModalComponent } from './navigation-modal/navigation-modal';
 | 
					import { AddonModQuizNavigationModalComponent } from './navigation-modal/navigation-modal';
 | 
				
			||||||
import { AddonModQuizPreflightModalComponent } from './preflight-modal/preflight-modal';
 | 
					 | 
				
			||||||
import { AddonModQuizAttemptInfoComponent } from './attempt-info/attempt-info';
 | 
					import { AddonModQuizAttemptInfoComponent } from './attempt-info/attempt-info';
 | 
				
			||||||
import { AddonModQuizAttemptStateComponent } from './attempt-state/attempt-state';
 | 
					import { AddonModQuizAttemptStateComponent } from './attempt-state/attempt-state';
 | 
				
			||||||
import { AddonModQuizQuestionCardComponent } from './question-card/question-card';
 | 
					import { AddonModQuizQuestionCardComponent } from './question-card/question-card';
 | 
				
			||||||
@ -31,7 +30,6 @@ import { AddonModQuizQuestionCardComponent } from './question-card/question-card
 | 
				
			|||||||
        AddonModQuizIndexComponent,
 | 
					        AddonModQuizIndexComponent,
 | 
				
			||||||
        AddonModQuizConnectionErrorComponent,
 | 
					        AddonModQuizConnectionErrorComponent,
 | 
				
			||||||
        AddonModQuizNavigationModalComponent,
 | 
					        AddonModQuizNavigationModalComponent,
 | 
				
			||||||
        AddonModQuizPreflightModalComponent,
 | 
					 | 
				
			||||||
        AddonModQuizQuestionCardComponent,
 | 
					        AddonModQuizQuestionCardComponent,
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    imports: [
 | 
					    imports: [
 | 
				
			||||||
@ -44,7 +42,6 @@ import { AddonModQuizQuestionCardComponent } from './question-card/question-card
 | 
				
			|||||||
        AddonModQuizIndexComponent,
 | 
					        AddonModQuizIndexComponent,
 | 
				
			||||||
        AddonModQuizConnectionErrorComponent,
 | 
					        AddonModQuizConnectionErrorComponent,
 | 
				
			||||||
        AddonModQuizNavigationModalComponent,
 | 
					        AddonModQuizNavigationModalComponent,
 | 
				
			||||||
        AddonModQuizPreflightModalComponent,
 | 
					 | 
				
			||||||
        AddonModQuizQuestionCardComponent,
 | 
					        AddonModQuizQuestionCardComponent,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					// (C) Copyright 2015 Moodle Pty Ltd.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					// you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					// You may obtain a copy of the License at
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					// distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					// See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { NgModule } from '@angular/core';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { CoreSharedModule } from '@/core/shared.module';
 | 
				
			||||||
 | 
					import { CoreCourseComponentsModule } from '@features/course/components/components.module';
 | 
				
			||||||
 | 
					import { AddonModQuizPreflightModalComponent } from './preflight-modal.component';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export { AddonModQuizPreflightModalComponent };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@NgModule({
 | 
				
			||||||
 | 
					    declarations: [
 | 
				
			||||||
 | 
					        AddonModQuizPreflightModalComponent,
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    imports: [
 | 
				
			||||||
 | 
					        CoreSharedModule,
 | 
				
			||||||
 | 
					        CoreCourseComponentsModule,
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    exports: [
 | 
				
			||||||
 | 
					        AddonModQuizPreflightModalComponent,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					export class AddonModQuizPreflightModalComponentModule {}
 | 
				
			||||||
@ -22,7 +22,6 @@ import { CoreSites, CoreSitesReadingStrategy } from '@services/sites';
 | 
				
			|||||||
import { CoreDomUtils } from '@services/utils/dom';
 | 
					import { CoreDomUtils } from '@services/utils/dom';
 | 
				
			||||||
import { CoreUtils } from '@services/utils/utils';
 | 
					import { CoreUtils } from '@services/utils/utils';
 | 
				
			||||||
import { makeSingleton, Translate } from '@singletons';
 | 
					import { makeSingleton, Translate } from '@singletons';
 | 
				
			||||||
import { AddonModQuizPreflightModalComponent } from '../components/preflight-modal/preflight-modal';
 | 
					 | 
				
			||||||
import { AddonModQuizAccessRuleDelegate } from './access-rules-delegate';
 | 
					import { AddonModQuizAccessRuleDelegate } from './access-rules-delegate';
 | 
				
			||||||
import { AddonModQuizModuleHandlerService } from './handlers/module';
 | 
					import { AddonModQuizModuleHandlerService } from './handlers/module';
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
@ -269,6 +268,9 @@ export class AddonModQuizHelperProvider {
 | 
				
			|||||||
            );
 | 
					            );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const { AddonModQuizPreflightModalComponent } =
 | 
				
			||||||
 | 
					            await import('@addons/mod/quiz/components/preflight-modal/preflight-modal.module');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Create and show the modal.
 | 
					        // Create and show the modal.
 | 
				
			||||||
        const modalData = await CoreDomUtils.openModal<Record<string, string>>({
 | 
					        const modalData = await CoreDomUtils.openModal<Record<string, string>>({
 | 
				
			||||||
            component: AddonModQuizPreflightModalComponent,
 | 
					            component: AddonModQuizPreflightModalComponent,
 | 
				
			||||||
 | 
				
			|||||||
@ -19,6 +19,7 @@ import { CoreEventObserver } from '@singletons/events';
 | 
				
			|||||||
import { CoreLogger } from '@singletons/logger';
 | 
					import { CoreLogger } from '@singletons/logger';
 | 
				
			||||||
import { AddonQtypeDdMarkerQuestionData } from '../component/ddmarker';
 | 
					import { AddonQtypeDdMarkerQuestionData } from '../component/ddmarker';
 | 
				
			||||||
import { AddonQtypeDdMarkerGraphicsApi } from './graphics_api';
 | 
					import { AddonQtypeDdMarkerGraphicsApi } from './graphics_api';
 | 
				
			||||||
 | 
					import { CoreUtils } from '@services/utils/utils';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Class to make a question of ddmarker type work.
 | 
					 * Class to make a question of ddmarker type work.
 | 
				
			||||||
@ -692,17 +693,21 @@ export class AddonQtypeDdMarkerQuestion {
 | 
				
			|||||||
            bgImg.src = this.imgSrc;
 | 
					            bgImg.src = this.imgSrc;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const imgLoaded = (): void => {
 | 
					        const imgLoaded = async (): Promise<void> => {
 | 
				
			||||||
            bgImg.removeEventListener('load', imgLoaded);
 | 
					            bgImg.removeEventListener('load', imgLoaded);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            this.makeImageDropable();
 | 
					            this.makeImageDropable();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            setTimeout(() => {
 | 
					 | 
				
			||||||
                this.redrawDragsAndDrops();
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            this.afterImageLoadDone = true;
 | 
					            this.afterImageLoadDone = true;
 | 
				
			||||||
            this.question.loaded = true;
 | 
					            this.question.loaded = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Wait for image to be visible, otherwise the calculated positions are wrong.
 | 
				
			||||||
 | 
					            const visiblePromise = CoreDom.waitToBeVisible(bgImg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            await CoreUtils.ignoreErrors(CoreUtils.timeoutPromise(visiblePromise, 500));
 | 
				
			||||||
 | 
					            visiblePromise.cancel(); // In case of timeout, cancel the promise.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            this.redrawDragsAndDrops();
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!bgImg.src || (bgImg.complete && bgImg.naturalWidth)) {
 | 
					        if (!bgImg.src || (bgImg.complete && bgImg.naturalWidth)) {
 | 
				
			||||||
 | 
				
			|||||||
@ -1,3 +1,3 @@
 | 
				
			|||||||
<core-user-avatar *ngIf="(alwaysShow || isMainScreen) && siteInfo" [site]="siteInfo" class="core-bar-button-image clickable"
 | 
					<core-user-avatar *ngIf="(alwaysShow || (isMainScreen && menuPage?.tabsPlacement === 'bottom')) && siteInfo" [site]="siteInfo"
 | 
				
			||||||
    [linkProfile]="false" (ariaButtonClick)="openUserMenu($event)" [userTour]="userTour"
 | 
					    class="core-bar-button-image clickable" [linkProfile]="false" (ariaButtonClick)="openUserMenu($event)" [userTour]="userTour"
 | 
				
			||||||
    [attr.aria-label]="'core.user.useraccount' | translate" />
 | 
					    [attr.aria-label]="'core.user.useraccount' | translate" />
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,3 @@
 | 
				
			|||||||
:host-context(ion-tabs.placement-side ion-toolbar) {
 | 
					 | 
				
			||||||
    display: none;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
:host core-user-avatar {
 | 
					:host core-user-avatar {
 | 
				
			||||||
    --userpicture-padding: 6px !important;
 | 
					    --userpicture-padding: 6px !important;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -12,7 +12,7 @@
 | 
				
			|||||||
// See the License for the specific language governing permissions and
 | 
					// See the License for the specific language governing permissions and
 | 
				
			||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { Component, Input, OnInit } from '@angular/core';
 | 
					import { Component, Input, OnInit, Optional } from '@angular/core';
 | 
				
			||||||
import { CoreSiteInfo } from '@classes/sites/unauthenticated-site';
 | 
					import { CoreSiteInfo } from '@classes/sites/unauthenticated-site';
 | 
				
			||||||
import { CoreUserTourDirectiveOptions } from '@directives/user-tour';
 | 
					import { CoreUserTourDirectiveOptions } from '@directives/user-tour';
 | 
				
			||||||
import { CoreUserToursAlignment, CoreUserToursSide } from '@features/usertours/services/user-tours';
 | 
					import { CoreUserToursAlignment, CoreUserToursSide } from '@features/usertours/services/user-tours';
 | 
				
			||||||
@ -22,6 +22,7 @@ import { CoreSites } from '@services/sites';
 | 
				
			|||||||
import { CoreDomUtils } from '@services/utils/dom';
 | 
					import { CoreDomUtils } from '@services/utils/dom';
 | 
				
			||||||
import { CoreMainMenuUserMenuTourComponent } from '../user-menu-tour/user-menu-tour';
 | 
					import { CoreMainMenuUserMenuTourComponent } from '../user-menu-tour/user-menu-tour';
 | 
				
			||||||
import { CoreMainMenuUserMenuComponent } from '../user-menu/user-menu';
 | 
					import { CoreMainMenuUserMenuComponent } from '../user-menu/user-menu';
 | 
				
			||||||
 | 
					import { CoreMainMenuPage } from '@features/mainmenu/pages/menu/menu';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Component to display an avatar on the header to open user menu.
 | 
					 * Component to display an avatar on the header to open user menu.
 | 
				
			||||||
@ -45,10 +46,8 @@ export class CoreMainMenuUserButtonComponent implements OnInit {
 | 
				
			|||||||
        side: CoreScreen.isMobile ? CoreUserToursSide.Start : CoreUserToursSide.End,
 | 
					        side: CoreScreen.isMobile ? CoreUserToursSide.Start : CoreUserToursSide.End,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    constructor(protected routerOutlet: IonRouterOutlet) {
 | 
					    constructor(protected routerOutlet: IonRouterOutlet, @Optional() protected menuPage: CoreMainMenuPage | null) {
 | 
				
			||||||
        const currentSite = CoreSites.getRequiredCurrentSite();
 | 
					        this.siteInfo = CoreSites.getCurrentSite()?.getInfo();
 | 
				
			||||||
 | 
					 | 
				
			||||||
        this.siteInfo = currentSite.getInfo();
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user