forked from CIT/Vmeda.Online
		
	MOBILE-3664 compile: Implement compile
This commit is contained in:
		
							parent
							
								
									fd314eb4d8
								
							
						
					
					
						commit
						9cc7c73b31
					
				@ -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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { AddonBadgesMyBadgesLinkHandler } from './services/handlers/mybadges-link';
 | 
					import { AddonBadgesMyBadgesLinkHandler } from './services/handlers/mybadges-link';
 | 
				
			||||||
@ -23,6 +23,11 @@ import { AddonBadgesUserHandler } from './services/handlers/user';
 | 
				
			|||||||
import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
					import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
				
			||||||
import { CorePushNotificationsDelegate } from '@features/pushnotifications/services/push-delegate';
 | 
					import { CorePushNotificationsDelegate } from '@features/pushnotifications/services/push-delegate';
 | 
				
			||||||
import { AddonBadgesPushClickHandler } from './services/handlers/push-click';
 | 
					import { AddonBadgesPushClickHandler } from './services/handlers/push-click';
 | 
				
			||||||
 | 
					import { AddonBadgesProvider } from './services/badges';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const ADDON_BADGES_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    AddonBadgesProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const mainMenuRoutes: Routes = [
 | 
					const mainMenuRoutes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
import { CoreMainMenuRoutingModule } from '@features/mainmenu/mainmenu-routing.module';
 | 
					import { CoreMainMenuRoutingModule } from '@features/mainmenu/mainmenu-routing.module';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -27,8 +27,18 @@ import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
				
			|||||||
import { CALENDAR_SITE_SCHEMA } from './services/database/calendar';
 | 
					import { CALENDAR_SITE_SCHEMA } from './services/database/calendar';
 | 
				
			||||||
import { CALENDAR_OFFLINE_SITE_SCHEMA } from './services/database/calendar-offline';
 | 
					import { CALENDAR_OFFLINE_SITE_SCHEMA } from './services/database/calendar-offline';
 | 
				
			||||||
import { AddonCalendarComponentsModule } from './components/components.module';
 | 
					import { AddonCalendarComponentsModule } from './components/components.module';
 | 
				
			||||||
import { AddonCalendar } from './services/calendar';
 | 
					import { AddonCalendar, AddonCalendarProvider } from './services/calendar';
 | 
				
			||||||
import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
					import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
				
			||||||
 | 
					import { AddonCalendarOfflineProvider } from './services/calendar-offline';
 | 
				
			||||||
 | 
					import { AddonCalendarHelperProvider } from './services/calendar-helper';
 | 
				
			||||||
 | 
					import { AddonCalendarSyncProvider } from './services/calendar-sync';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const ADDON_CALENDAR_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    AddonCalendarProvider,
 | 
				
			||||||
 | 
					    AddonCalendarOfflineProvider,
 | 
				
			||||||
 | 
					    AddonCalendarHelperProvider,
 | 
				
			||||||
 | 
					    AddonCalendarSyncProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const mainMenuChildrenRoutes: Routes = [
 | 
					const mainMenuChildrenRoutes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -12,9 +12,14 @@
 | 
				
			|||||||
// 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 { NgModule } from '@angular/core';
 | 
					import { NgModule, Type } from '@angular/core';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { AddonMessageOutputAirnotifierModule } from './airnotifier/airnotifier.module';
 | 
					import { AddonMessageOutputAirnotifierModule } from './airnotifier/airnotifier.module';
 | 
				
			||||||
 | 
					import { AddonMessageOutputDelegateService } from './services/messageoutput-delegate';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const ADDON_MESSAGEOUTPUT_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    AddonMessageOutputDelegateService,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    declarations: [
 | 
					    declarations: [
 | 
				
			||||||
 | 
				
			|||||||
@ -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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreMainMenuRoutingModule } from '@features/mainmenu/mainmenu-routing.module';
 | 
					import { CoreMainMenuRoutingModule } from '@features/mainmenu/mainmenu-routing.module';
 | 
				
			||||||
@ -33,9 +33,17 @@ import { AddonMessagesPushClickHandler } from './services/handlers/push-click';
 | 
				
			|||||||
import { CoreUserDelegate } from '@features/user/services/user-delegate';
 | 
					import { CoreUserDelegate } from '@features/user/services/user-delegate';
 | 
				
			||||||
import { AddonMessagesSendMessageUserHandler } from './services/handlers/user-send-message';
 | 
					import { AddonMessagesSendMessageUserHandler } from './services/handlers/user-send-message';
 | 
				
			||||||
import { Network, NgZone } from '@singletons';
 | 
					import { Network, NgZone } from '@singletons';
 | 
				
			||||||
import { AddonMessagesSync } from './services/messages-sync';
 | 
					import { AddonMessagesSync, AddonMessagesSyncProvider } from './services/messages-sync';
 | 
				
			||||||
import { AddonMessagesSyncCronHandler } from './services/handlers/sync-cron';
 | 
					import { AddonMessagesSyncCronHandler } from './services/handlers/sync-cron';
 | 
				
			||||||
import { CoreSitePreferencesRoutingModule } from '@features/settings/pages/site/site-routing';
 | 
					import { CoreSitePreferencesRoutingModule } from '@features/settings/pages/site/site-routing';
 | 
				
			||||||
 | 
					import { AddonMessagesProvider } from './services/messages';
 | 
				
			||||||
 | 
					import { AddonMessagesOfflineProvider } from './services/messages-offline';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const ADDON_MESSAGES_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    AddonMessagesProvider,
 | 
				
			||||||
 | 
					    AddonMessagesOfflineProvider,
 | 
				
			||||||
 | 
					    AddonMessagesSyncProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const mainMenuChildrenRoutes: Routes = [
 | 
					const mainMenuChildrenRoutes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
					import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
				
			||||||
import { CoreCourseModuleDelegate } from '@features/course/services/module-delegate';
 | 
					import { CoreCourseModuleDelegate } from '@features/course/services/module-delegate';
 | 
				
			||||||
@ -23,15 +23,30 @@ import { CoreCronDelegate } from '@services/cron';
 | 
				
			|||||||
import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
					import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
				
			||||||
import { AddonModAssignComponentsModule } from './components/components.module';
 | 
					import { AddonModAssignComponentsModule } from './components/components.module';
 | 
				
			||||||
import { AddonModAssignFeedbackModule } from './feedback/feedback.module';
 | 
					import { AddonModAssignFeedbackModule } from './feedback/feedback.module';
 | 
				
			||||||
 | 
					import { AddonModAssignProvider } from './services/assign';
 | 
				
			||||||
 | 
					import { AddonModAssignHelperProvider } from './services/assign-helper';
 | 
				
			||||||
 | 
					import { AddonModAssignOfflineProvider } from './services/assign-offline';
 | 
				
			||||||
 | 
					import { AddonModAssignSyncProvider } from './services/assign-sync';
 | 
				
			||||||
import { OFFLINE_SITE_SCHEMA } from './services/database/assign';
 | 
					import { OFFLINE_SITE_SCHEMA } from './services/database/assign';
 | 
				
			||||||
 | 
					import { AddonModAssignFeedbackDelegateService } from './services/feedback-delegate';
 | 
				
			||||||
import { AddonModAssignIndexLinkHandler } from './services/handlers/index-link';
 | 
					import { AddonModAssignIndexLinkHandler } from './services/handlers/index-link';
 | 
				
			||||||
import { AddonModAssignListLinkHandler } from './services/handlers/list-link';
 | 
					import { AddonModAssignListLinkHandler } from './services/handlers/list-link';
 | 
				
			||||||
import { AddonModAssignModuleHandler, AddonModAssignModuleHandlerService } from './services/handlers/module';
 | 
					import { AddonModAssignModuleHandler, AddonModAssignModuleHandlerService } from './services/handlers/module';
 | 
				
			||||||
import { AddonModAssignPrefetchHandler } from './services/handlers/prefetch';
 | 
					import { AddonModAssignPrefetchHandler } from './services/handlers/prefetch';
 | 
				
			||||||
import { AddonModAssignPushClickHandler } from './services/handlers/push-click';
 | 
					import { AddonModAssignPushClickHandler } from './services/handlers/push-click';
 | 
				
			||||||
import { AddonModAssignSyncCronHandler } from './services/handlers/sync-cron';
 | 
					import { AddonModAssignSyncCronHandler } from './services/handlers/sync-cron';
 | 
				
			||||||
 | 
					import { AddonModAssignSubmissionDelegateService } from './services/submission-delegate';
 | 
				
			||||||
import { AddonModAssignSubmissionModule } from './submission/submission.module';
 | 
					import { AddonModAssignSubmissionModule } from './submission/submission.module';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const ADDON_MOD_ASSIGN_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    AddonModAssignProvider,
 | 
				
			||||||
 | 
					    AddonModAssignOfflineProvider,
 | 
				
			||||||
 | 
					    AddonModAssignSyncProvider,
 | 
				
			||||||
 | 
					    AddonModAssignHelperProvider,
 | 
				
			||||||
 | 
					    AddonModAssignFeedbackDelegateService,
 | 
				
			||||||
 | 
					    AddonModAssignSubmissionDelegateService,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        path: AddonModAssignModuleHandlerService.PAGE_NAME,
 | 
					        path: AddonModAssignModuleHandlerService.PAGE_NAME,
 | 
				
			||||||
 | 
				
			|||||||
@ -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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
					import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
				
			||||||
import { CoreCourseModuleDelegate } from '@features/course/services/module-delegate';
 | 
					import { CoreCourseModuleDelegate } from '@features/course/services/module-delegate';
 | 
				
			||||||
@ -25,6 +25,11 @@ import { AddonModBookIndexLinkHandler } from './services/handlers/index-link';
 | 
				
			|||||||
import { AddonModBookListLinkHandler } from './services/handlers/list-link';
 | 
					import { AddonModBookListLinkHandler } from './services/handlers/list-link';
 | 
				
			||||||
import { AddonModBookPrefetchHandler } from './services/handlers/prefetch';
 | 
					import { AddonModBookPrefetchHandler } from './services/handlers/prefetch';
 | 
				
			||||||
import { AddonModBookTagAreaHandler } from './services/handlers/tag-area';
 | 
					import { AddonModBookTagAreaHandler } from './services/handlers/tag-area';
 | 
				
			||||||
 | 
					import { AddonModBookProvider } from './services/book';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const ADDON_MOD_BOOK_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    AddonModBookProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
					import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
				
			||||||
import { CoreCourseModuleDelegate } from '@features/course/services/module-delegate';
 | 
					import { CoreCourseModuleDelegate } from '@features/course/services/module-delegate';
 | 
				
			||||||
@ -20,12 +20,19 @@ import { CoreCourseModulePrefetchDelegate } from '@features/course/services/modu
 | 
				
			|||||||
import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
					import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
				
			||||||
import { CorePluginFileDelegate } from '@services/plugin-file-delegate';
 | 
					import { CorePluginFileDelegate } from '@services/plugin-file-delegate';
 | 
				
			||||||
import { AddonModFolderComponentsModule } from './components/components.module';
 | 
					import { AddonModFolderComponentsModule } from './components/components.module';
 | 
				
			||||||
 | 
					import { AddonModFolderProvider } from './services/folder';
 | 
				
			||||||
 | 
					import { AddonModFolderHelperProvider } from './services/folder-helper';
 | 
				
			||||||
import { AddonModFolderIndexLinkHandler } from './services/handlers/index-link';
 | 
					import { AddonModFolderIndexLinkHandler } from './services/handlers/index-link';
 | 
				
			||||||
import { AddonModFolderListLinkHandler } from './services/handlers/list-link';
 | 
					import { AddonModFolderListLinkHandler } from './services/handlers/list-link';
 | 
				
			||||||
import { AddonModFolderModuleHandler, AddonModFolderModuleHandlerService } from './services/handlers/module';
 | 
					import { AddonModFolderModuleHandler, AddonModFolderModuleHandlerService } from './services/handlers/module';
 | 
				
			||||||
import { AddonModFolderPluginFileHandler } from './services/handlers/pluginfile';
 | 
					import { AddonModFolderPluginFileHandler } from './services/handlers/pluginfile';
 | 
				
			||||||
import { AddonModFolderPrefetchHandler } from './services/handlers/prefetch';
 | 
					import { AddonModFolderPrefetchHandler } from './services/handlers/prefetch';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const ADDON_MOD_FOLDER_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    AddonModFolderProvider,
 | 
				
			||||||
 | 
					    AddonModFolderHelperProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        path: AddonModFolderModuleHandlerService.PAGE_NAME,
 | 
					        path: AddonModFolderModuleHandlerService.PAGE_NAME,
 | 
				
			||||||
 | 
				
			|||||||
@ -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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { conditionalRoutes } from '@/app/app-routing.module';
 | 
					import { conditionalRoutes } from '@/app/app-routing.module';
 | 
				
			||||||
@ -38,6 +38,17 @@ import { CoreTagAreaDelegate } from '@features/tag/services/tag-area-delegate';
 | 
				
			|||||||
import { AddonModForumTagAreaHandler } from './services/handlers/tag-area';
 | 
					import { AddonModForumTagAreaHandler } from './services/handlers/tag-area';
 | 
				
			||||||
import { CorePushNotificationsDelegate } from '@features/pushnotifications/services/push-delegate';
 | 
					import { CorePushNotificationsDelegate } from '@features/pushnotifications/services/push-delegate';
 | 
				
			||||||
import { AddonModForumPushClickHandler } from './services/handlers/push-click';
 | 
					import { AddonModForumPushClickHandler } from './services/handlers/push-click';
 | 
				
			||||||
 | 
					import { AddonModForumProvider } from './services/forum';
 | 
				
			||||||
 | 
					import { AddonModForumOfflineProvider } from './services/offline';
 | 
				
			||||||
 | 
					import { AddonModForumHelperProvider } from './services/helper';
 | 
				
			||||||
 | 
					import { AddonModForumSyncProvider } from './services/sync';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const ADDON_MOD_FORUM_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    AddonModForumProvider,
 | 
				
			||||||
 | 
					    AddonModForumOfflineProvider,
 | 
				
			||||||
 | 
					    AddonModForumHelperProvider,
 | 
				
			||||||
 | 
					    AddonModForumSyncProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const mainMenuRoutes: Routes = [
 | 
					const mainMenuRoutes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
					import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
				
			||||||
import { CoreCourseModuleDelegate } from '@features/course/services/module-delegate';
 | 
					import { CoreCourseModuleDelegate } from '@features/course/services/module-delegate';
 | 
				
			||||||
@ -25,6 +25,11 @@ import { AddonModImscpListLinkHandler } from './services/handlers/list-link';
 | 
				
			|||||||
import { AddonModImscpModuleHandler, AddonModImscpModuleHandlerService } from './services/handlers/module';
 | 
					import { AddonModImscpModuleHandler, AddonModImscpModuleHandlerService } from './services/handlers/module';
 | 
				
			||||||
import { AddonModImscpPluginFileHandler } from './services/handlers/pluginfile';
 | 
					import { AddonModImscpPluginFileHandler } from './services/handlers/pluginfile';
 | 
				
			||||||
import { AddonModImscpPrefetchHandler } from './services/handlers/prefetch';
 | 
					import { AddonModImscpPrefetchHandler } from './services/handlers/prefetch';
 | 
				
			||||||
 | 
					import { AddonModImscpProvider } from './services/imscp';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const ADDON_MOD_IMSCP_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    AddonModImscpProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
					import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
				
			||||||
import { CoreCourseModuleDelegate } from '@features/course/services/module-delegate';
 | 
					import { CoreCourseModuleDelegate } from '@features/course/services/module-delegate';
 | 
				
			||||||
@ -32,6 +32,17 @@ import { AddonModLessonPrefetchHandler } from './services/handlers/prefetch';
 | 
				
			|||||||
import { AddonModLessonPushClickHandler } from './services/handlers/push-click';
 | 
					import { AddonModLessonPushClickHandler } from './services/handlers/push-click';
 | 
				
			||||||
import { AddonModLessonReportLinkHandler } from './services/handlers/report-link';
 | 
					import { AddonModLessonReportLinkHandler } from './services/handlers/report-link';
 | 
				
			||||||
import { AddonModLessonSyncCronHandler } from './services/handlers/sync-cron';
 | 
					import { AddonModLessonSyncCronHandler } from './services/handlers/sync-cron';
 | 
				
			||||||
 | 
					import { AddonModLessonProvider } from './services/lesson';
 | 
				
			||||||
 | 
					import { AddonModLessonHelperProvider } from './services/lesson-helper';
 | 
				
			||||||
 | 
					import { AddonModLessonOfflineProvider } from './services/lesson-offline';
 | 
				
			||||||
 | 
					import { AddonModLessonSyncProvider } from './services/lesson-sync';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const ADDON_MOD_LESSON_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    AddonModLessonProvider,
 | 
				
			||||||
 | 
					    AddonModLessonOfflineProvider,
 | 
				
			||||||
 | 
					    AddonModLessonSyncProvider,
 | 
				
			||||||
 | 
					    AddonModLessonHelperProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
					import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
				
			||||||
import { CoreCourseModuleDelegate } from '@features/course/services/module-delegate';
 | 
					import { CoreCourseModuleDelegate } from '@features/course/services/module-delegate';
 | 
				
			||||||
@ -25,6 +25,13 @@ import { AddonModPageListLinkHandler } from './services/handlers/list-link';
 | 
				
			|||||||
import { AddonModPageModuleHandler, AddonModPageModuleHandlerService } from './services/handlers/module';
 | 
					import { AddonModPageModuleHandler, AddonModPageModuleHandlerService } from './services/handlers/module';
 | 
				
			||||||
import { AddonModPagePluginFileHandler } from './services/handlers/pluginfile';
 | 
					import { AddonModPagePluginFileHandler } from './services/handlers/pluginfile';
 | 
				
			||||||
import { AddonModPagePrefetchHandler } from './services/handlers/prefetch';
 | 
					import { AddonModPagePrefetchHandler } from './services/handlers/prefetch';
 | 
				
			||||||
 | 
					import { AddonModPageProvider } from './services/page';
 | 
				
			||||||
 | 
					import { AddonModPageHelperProvider } from './services/page-helper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const ADDON_MOD_PAGE_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    AddonModPageProvider,
 | 
				
			||||||
 | 
					    AddonModPageHelperProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
					import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -24,6 +24,7 @@ import { CoreCronDelegate } from '@services/cron';
 | 
				
			|||||||
import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
					import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
				
			||||||
import { AddonModQuizAccessRulesModule } from './accessrules/accessrules.module';
 | 
					import { AddonModQuizAccessRulesModule } from './accessrules/accessrules.module';
 | 
				
			||||||
import { AddonModQuizComponentsModule } from './components/components.module';
 | 
					import { AddonModQuizComponentsModule } from './components/components.module';
 | 
				
			||||||
 | 
					import { AddonModQuizAccessRuleDelegateService } from './services/access-rules-delegate';
 | 
				
			||||||
import { SITE_SCHEMA } from './services/database/quiz';
 | 
					import { SITE_SCHEMA } from './services/database/quiz';
 | 
				
			||||||
import { AddonModQuizGradeLinkHandler } from './services/handlers/grade-link';
 | 
					import { AddonModQuizGradeLinkHandler } from './services/handlers/grade-link';
 | 
				
			||||||
import { AddonModQuizIndexLinkHandler } from './services/handlers/index-link';
 | 
					import { AddonModQuizIndexLinkHandler } from './services/handlers/index-link';
 | 
				
			||||||
@ -33,6 +34,18 @@ import { AddonModQuizPrefetchHandler } from './services/handlers/prefetch';
 | 
				
			|||||||
import { AddonModQuizPushClickHandler } from './services/handlers/push-click';
 | 
					import { AddonModQuizPushClickHandler } from './services/handlers/push-click';
 | 
				
			||||||
import { AddonModQuizReviewLinkHandler } from './services/handlers/review-link';
 | 
					import { AddonModQuizReviewLinkHandler } from './services/handlers/review-link';
 | 
				
			||||||
import { AddonModQuizSyncCronHandler } from './services/handlers/sync-cron';
 | 
					import { AddonModQuizSyncCronHandler } from './services/handlers/sync-cron';
 | 
				
			||||||
 | 
					import { AddonModQuizProvider } from './services/quiz';
 | 
				
			||||||
 | 
					import { AddonModQuizHelperProvider } from './services/quiz-helper';
 | 
				
			||||||
 | 
					import { AddonModQuizOfflineProvider } from './services/quiz-offline';
 | 
				
			||||||
 | 
					import { AddonModQuizSyncProvider } from './services/quiz-sync';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const ADDON_MOD_QUIZ_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    AddonModQuizAccessRuleDelegateService,
 | 
				
			||||||
 | 
					    AddonModQuizProvider,
 | 
				
			||||||
 | 
					    AddonModQuizOfflineProvider,
 | 
				
			||||||
 | 
					    AddonModQuizHelperProvider,
 | 
				
			||||||
 | 
					    AddonModQuizSyncProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
					import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
				
			||||||
import { CoreCourseModuleDelegate } from '@features/course/services/module-delegate';
 | 
					import { CoreCourseModuleDelegate } from '@features/course/services/module-delegate';
 | 
				
			||||||
@ -25,6 +25,11 @@ import { AddonModResourceListLinkHandler } from './services/handlers/list-link';
 | 
				
			|||||||
import { AddonModResourceModuleHandlerService, AddonModResourceModuleHandler } from './services/handlers/module';
 | 
					import { AddonModResourceModuleHandlerService, AddonModResourceModuleHandler } from './services/handlers/module';
 | 
				
			||||||
import { AddonModResourcePluginFileHandler } from './services/handlers/pluginfile';
 | 
					import { AddonModResourcePluginFileHandler } from './services/handlers/pluginfile';
 | 
				
			||||||
import { AddonModResourcePrefetchHandler } from './services/handlers/prefetch';
 | 
					import { AddonModResourcePrefetchHandler } from './services/handlers/prefetch';
 | 
				
			||||||
 | 
					import { AddonModResourceProvider } from './services/resource';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const ADDON_MOD_RESOURCE_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    AddonModResourceProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
					import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
				
			||||||
import { CoreCourseModuleDelegate } from '@features/course/services/module-delegate';
 | 
					import { CoreCourseModuleDelegate } from '@features/course/services/module-delegate';
 | 
				
			||||||
@ -23,6 +23,13 @@ import { AddonModUrlIndexLinkHandler } from './services/handlers/index-link';
 | 
				
			|||||||
import { AddonModUrlListLinkHandler } from './services/handlers/list-link';
 | 
					import { AddonModUrlListLinkHandler } from './services/handlers/list-link';
 | 
				
			||||||
import { AddonModUrlModuleHandler, AddonModUrlModuleHandlerService } from './services/handlers/module';
 | 
					import { AddonModUrlModuleHandler, AddonModUrlModuleHandlerService } from './services/handlers/module';
 | 
				
			||||||
import { AddonModUrlPrefetchHandler } from './services/handlers/prefetch';
 | 
					import { AddonModUrlPrefetchHandler } from './services/handlers/prefetch';
 | 
				
			||||||
 | 
					import { AddonModUrlProvider } from './services/url';
 | 
				
			||||||
 | 
					import { AddonModUrlHelperProvider } from './services/url-helper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const ADDON_MOD_URL_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    AddonModUrlProvider,
 | 
				
			||||||
 | 
					    AddonModUrlHelperProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreCronDelegate } from '@services/cron';
 | 
					import { CoreCronDelegate } from '@services/cron';
 | 
				
			||||||
@ -26,6 +26,13 @@ import { AddonNotificationsCronHandler } from './services/handlers/cron';
 | 
				
			|||||||
import { AddonNotificationsPushClickHandler } from './services/handlers/push-click';
 | 
					import { AddonNotificationsPushClickHandler } from './services/handlers/push-click';
 | 
				
			||||||
import { AddonNotificationsSettingsHandler, AddonNotificationsSettingsHandlerService } from './services/handlers/settings';
 | 
					import { AddonNotificationsSettingsHandler, AddonNotificationsSettingsHandlerService } from './services/handlers/settings';
 | 
				
			||||||
import { CoreSitePreferencesRoutingModule } from '@features/settings/pages/site/site-routing';
 | 
					import { CoreSitePreferencesRoutingModule } from '@features/settings/pages/site/site-routing';
 | 
				
			||||||
 | 
					import { AddonNotificationsProvider } from './services/notifications';
 | 
				
			||||||
 | 
					import { AddonNotificationsHelperProvider } from './services/notifications-helper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const ADDON_NOTIFICATIONS_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    AddonNotificationsProvider,
 | 
				
			||||||
 | 
					    AddonNotificationsHelperProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -12,13 +12,20 @@
 | 
				
			|||||||
// 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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreMainMenuDelegate } from '@features/mainmenu/services/mainmenu-delegate';
 | 
					import { CoreMainMenuDelegate } from '@features/mainmenu/services/mainmenu-delegate';
 | 
				
			||||||
import { CoreMainMenuRoutingModule } from '@features/mainmenu/mainmenu-routing.module';
 | 
					import { CoreMainMenuRoutingModule } from '@features/mainmenu/mainmenu-routing.module';
 | 
				
			||||||
import { AddonPrivateFilesMainMenuHandler, AddonPrivateFilesMainMenuHandlerService } from './services/handlers/mainmenu';
 | 
					import { AddonPrivateFilesMainMenuHandler, AddonPrivateFilesMainMenuHandlerService } from './services/handlers/mainmenu';
 | 
				
			||||||
import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
					import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
				
			||||||
 | 
					import { AddonPrivateFilesProvider } from './services/privatefiles';
 | 
				
			||||||
 | 
					import { AddonPrivateFilesHelperProvider } from './services/privatefiles-helper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const ADDON_PRIVATEFILES_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    AddonPrivateFilesProvider,
 | 
				
			||||||
 | 
					    AddonPrivateFilesHelperProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -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 { NgModule } from '@angular/core';
 | 
					import { COMPILER_OPTIONS, NgModule } from '@angular/core';
 | 
				
			||||||
import { BrowserModule } from '@angular/platform-browser';
 | 
					import { BrowserModule } from '@angular/platform-browser';
 | 
				
			||||||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 | 
					import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 | 
				
			||||||
import { RouteReuseStrategy } from '@angular/router';
 | 
					import { RouteReuseStrategy } from '@angular/router';
 | 
				
			||||||
@ -28,6 +28,7 @@ import { AddonsModule } from '@/addons/addons.module';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { AppComponent } from './app.component';
 | 
					import { AppComponent } from './app.component';
 | 
				
			||||||
import { AppRoutingModule } from './app-routing.module';
 | 
					import { AppRoutingModule } from './app-routing.module';
 | 
				
			||||||
 | 
					import { JitCompilerFactory } from '@angular/platform-browser-dynamic';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// For translate loader. AoT requires an exported function for factories.
 | 
					// For translate loader. AoT requires an exported function for factories.
 | 
				
			||||||
export function createTranslateLoader(http: HttpClient): TranslateHttpLoader {
 | 
					export function createTranslateLoader(http: HttpClient): TranslateHttpLoader {
 | 
				
			||||||
@ -55,6 +56,8 @@ export function createTranslateLoader(http: HttpClient): TranslateHttpLoader {
 | 
				
			|||||||
    ],
 | 
					    ],
 | 
				
			||||||
    providers: [
 | 
					    providers: [
 | 
				
			||||||
        { provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
 | 
					        { provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
 | 
				
			||||||
 | 
					        { provide: COMPILER_OPTIONS, useValue: {}, multi: true },
 | 
				
			||||||
 | 
					        { provide: JitCompilerFactory, useClass: JitCompilerFactory, deps: [COMPILER_OPTIONS] },
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    bootstrap: [AppComponent],
 | 
					    bootstrap: [AppComponent],
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
				
			|||||||
@ -13,7 +13,7 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { HTTP_INTERCEPTORS } from '@angular/common/http';
 | 
					import { HTTP_INTERCEPTORS } from '@angular/common/http';
 | 
				
			||||||
import { ApplicationInitStatus, Injector, NgModule } from '@angular/core';
 | 
					import { ApplicationInitStatus, Injector, NgModule, Type } from '@angular/core';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreApplicationInitStatus } from './classes/application-init-status';
 | 
					import { CoreApplicationInitStatus } from './classes/application-init-status';
 | 
				
			||||||
import { CoreFeaturesModule } from './features/features.module';
 | 
					import { CoreFeaturesModule } from './features/features.module';
 | 
				
			||||||
@ -21,6 +21,63 @@ import { CoreInterceptor } from './classes/interceptor';
 | 
				
			|||||||
import { getDatabaseProviders } from './services/database';
 | 
					import { getDatabaseProviders } from './services/database';
 | 
				
			||||||
import { getInitializerProviders } from './initializers';
 | 
					import { getInitializerProviders } from './initializers';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { CoreDbProvider } from '@services/db';
 | 
				
			||||||
 | 
					import { CoreAppProvider } from '@services/app';
 | 
				
			||||||
 | 
					import { CoreConfigProvider } from '@services/config';
 | 
				
			||||||
 | 
					import { CoreLangProvider } from '@services/lang';
 | 
				
			||||||
 | 
					import { CoreTextUtilsProvider } from '@services/utils/text';
 | 
				
			||||||
 | 
					import { CoreDomUtilsProvider } from '@services/utils/dom';
 | 
				
			||||||
 | 
					import { CoreIframeUtilsProvider } from '@services/utils/iframe';
 | 
				
			||||||
 | 
					import { CoreTimeUtilsProvider } from '@services/utils/time';
 | 
				
			||||||
 | 
					import { CoreUrlUtilsProvider } from '@services/utils/url';
 | 
				
			||||||
 | 
					import { CoreUtilsProvider } from '@services/utils/utils';
 | 
				
			||||||
 | 
					import { CoreMimetypeUtilsProvider } from '@services/utils/mimetype';
 | 
				
			||||||
 | 
					import { CoreFileProvider } from '@services/file';
 | 
				
			||||||
 | 
					import { CoreWSProvider } from '@services/ws';
 | 
				
			||||||
 | 
					import { CoreSitesProvider } from '@services/sites';
 | 
				
			||||||
 | 
					import { CoreLocalNotificationsProvider } from '@services/local-notifications';
 | 
				
			||||||
 | 
					import { CoreGroupsProvider } from '@services/groups';
 | 
				
			||||||
 | 
					import { CoreCronDelegateService } from '@services/cron';
 | 
				
			||||||
 | 
					import { CoreFileSessionProvider } from '@services/file-session';
 | 
				
			||||||
 | 
					import { CoreFilepoolProvider } from '@services/filepool';
 | 
				
			||||||
 | 
					import { CoreUpdateManagerProvider } from '@services/update-manager';
 | 
				
			||||||
 | 
					import { CorePluginFileDelegateService } from '@services/plugin-file-delegate';
 | 
				
			||||||
 | 
					import { CoreSyncProvider } from '@services/sync';
 | 
				
			||||||
 | 
					import { CoreFileHelperProvider } from '@services/file-helper';
 | 
				
			||||||
 | 
					import { CoreGeolocationProvider } from '@services/geolocation';
 | 
				
			||||||
 | 
					import { CoreNavigatorService } from '@services/navigator';
 | 
				
			||||||
 | 
					import { CoreScreenService } from '@services/screen';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CORE_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    CoreAppProvider,
 | 
				
			||||||
 | 
					    CoreConfigProvider,
 | 
				
			||||||
 | 
					    CoreCronDelegateService,
 | 
				
			||||||
 | 
					    // @todo CoreCustomURLSchemesProvider,
 | 
				
			||||||
 | 
					    CoreDbProvider,
 | 
				
			||||||
 | 
					    CoreFileHelperProvider,
 | 
				
			||||||
 | 
					    CoreFileSessionProvider,
 | 
				
			||||||
 | 
					    CoreFileProvider,
 | 
				
			||||||
 | 
					    CoreFilepoolProvider,
 | 
				
			||||||
 | 
					    CoreGeolocationProvider,
 | 
				
			||||||
 | 
					    CoreGroupsProvider,
 | 
				
			||||||
 | 
					    CoreLangProvider,
 | 
				
			||||||
 | 
					    CoreLocalNotificationsProvider,
 | 
				
			||||||
 | 
					    CoreNavigatorService,
 | 
				
			||||||
 | 
					    CorePluginFileDelegateService,
 | 
				
			||||||
 | 
					    CoreScreenService,
 | 
				
			||||||
 | 
					    CoreSitesProvider,
 | 
				
			||||||
 | 
					    CoreSyncProvider,
 | 
				
			||||||
 | 
					    CoreUpdateManagerProvider,
 | 
				
			||||||
 | 
					    CoreDomUtilsProvider,
 | 
				
			||||||
 | 
					    CoreIframeUtilsProvider,
 | 
				
			||||||
 | 
					    CoreMimetypeUtilsProvider,
 | 
				
			||||||
 | 
					    CoreTextUtilsProvider,
 | 
				
			||||||
 | 
					    CoreTimeUtilsProvider,
 | 
				
			||||||
 | 
					    CoreUrlUtilsProvider,
 | 
				
			||||||
 | 
					    CoreUtilsProvider,
 | 
				
			||||||
 | 
					    CoreWSProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					    imports: [
 | 
				
			||||||
        CoreFeaturesModule,
 | 
					        CoreFeaturesModule,
 | 
				
			||||||
 | 
				
			|||||||
@ -12,13 +12,17 @@
 | 
				
			|||||||
// 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 { NgModule } from '@angular/core';
 | 
					import { NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { CoreBlockDefaultHandler } from './services/handlers/default-block';
 | 
					
 | 
				
			||||||
 | 
					import { CoreBlockDelegateService } from './services/block-delegate';
 | 
				
			||||||
 | 
					import { CoreBlockHelperProvider } from './services/block-helper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CORE_BLOCK_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    CoreBlockDelegateService,
 | 
				
			||||||
 | 
					    CoreBlockHelperProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    providers: [
 | 
					    providers: [],
 | 
				
			||||||
        CoreBlockDefaultHandler,
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class CoreBlockModule {
 | 
					export class CoreBlockModule {}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -18,7 +18,7 @@ import { CoreBlockBaseHandler } from '../../classes/base-block-handler';
 | 
				
			|||||||
/**
 | 
					/**
 | 
				
			||||||
 * Default handler used when a block type doesn't have a specific implementation.
 | 
					 * Default handler used when a block type doesn't have a specific implementation.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@Injectable()
 | 
					@Injectable({ providedIn: 'root' })
 | 
				
			||||||
export class CoreBlockDefaultHandler extends CoreBlockBaseHandler {
 | 
					export class CoreBlockDefaultHandler extends CoreBlockBaseHandler {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    name = 'CoreBlockDefault';
 | 
					    name = 'CoreBlockDefault';
 | 
				
			||||||
 | 
				
			|||||||
@ -12,16 +12,24 @@
 | 
				
			|||||||
// 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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
					import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
				
			||||||
import { CoreCronDelegate } from '@services/cron';
 | 
					import { CoreCronDelegate } from '@services/cron';
 | 
				
			||||||
import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
					import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
				
			||||||
import { CoreCommentsComponentsModule } from './components/components.module';
 | 
					import { CoreCommentsComponentsModule } from './components/components.module';
 | 
				
			||||||
import { CoreComments } from './services/comments';
 | 
					import { CoreComments, CoreCommentsProvider } from './services/comments';
 | 
				
			||||||
 | 
					import { CoreCommentsOfflineProvider } from './services/comments-offline';
 | 
				
			||||||
 | 
					import { CoreCommentsSyncProvider } from './services/comments-sync';
 | 
				
			||||||
import { COMMENTS_OFFLINE_SITE_SCHEMA } from './services/database/comments';
 | 
					import { COMMENTS_OFFLINE_SITE_SCHEMA } from './services/database/comments';
 | 
				
			||||||
import { CoreCommentsSyncCronHandler } from './services/handlers/sync-cron';
 | 
					import { CoreCommentsSyncCronHandler } from './services/handlers/sync-cron';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CORE_COMMENTS_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    CoreCommentsOfflineProvider,
 | 
				
			||||||
 | 
					    CoreCommentsSyncProvider,
 | 
				
			||||||
 | 
					    CoreCommentsProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        path: 'comments',
 | 
					        path: 'comments',
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					// (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 { CoreCompileHtmlComponent } from './compile-html';
 | 
				
			||||||
 | 
					import { CoreSharedModule } from '@/core/shared.module';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@NgModule({
 | 
				
			||||||
 | 
					    declarations: [
 | 
				
			||||||
 | 
					        CoreCompileHtmlComponent,
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    imports: [
 | 
				
			||||||
 | 
					        CoreSharedModule,
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    exports: [
 | 
				
			||||||
 | 
					        CoreCompileHtmlComponent,
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					export class CoreCompileHtmlComponentModule {}
 | 
				
			||||||
@ -0,0 +1,291 @@
 | 
				
			|||||||
 | 
					// (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 {
 | 
				
			||||||
 | 
					    Component,
 | 
				
			||||||
 | 
					    Input,
 | 
				
			||||||
 | 
					    OnInit,
 | 
				
			||||||
 | 
					    OnChanges,
 | 
				
			||||||
 | 
					    OnDestroy,
 | 
				
			||||||
 | 
					    ViewContainerRef,
 | 
				
			||||||
 | 
					    ViewChild,
 | 
				
			||||||
 | 
					    ComponentRef,
 | 
				
			||||||
 | 
					    SimpleChange,
 | 
				
			||||||
 | 
					    ChangeDetectorRef,
 | 
				
			||||||
 | 
					    ElementRef,
 | 
				
			||||||
 | 
					    Output,
 | 
				
			||||||
 | 
					    EventEmitter,
 | 
				
			||||||
 | 
					    DoCheck,
 | 
				
			||||||
 | 
					    KeyValueDiffers,
 | 
				
			||||||
 | 
					    AfterContentInit,
 | 
				
			||||||
 | 
					    AfterViewInit,
 | 
				
			||||||
 | 
					    Type,
 | 
				
			||||||
 | 
					    KeyValueDiffer,
 | 
				
			||||||
 | 
					} from '@angular/core';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { CoreCompile } from '@features/compile/services/compile';
 | 
				
			||||||
 | 
					import { CoreDomUtils } from '@services/utils/dom';
 | 
				
			||||||
 | 
					import { CoreUtils } from '@services/utils/utils';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * This component has a behaviour similar to $compile for AngularJS. Given an HTML code, it will compile it so all its
 | 
				
			||||||
 | 
					 * components and directives are instantiated.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * IMPORTANT: Use this component only if it is a must. It will create and compile a new component and module everytime this
 | 
				
			||||||
 | 
					 * component is used, so it can slow down the app.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This component has its own module to prevent circular dependencies. If you want to use it,
 | 
				
			||||||
 | 
					 * you need to import CoreCompileHtmlComponentModule.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You can provide some Javascript code (as text) to be executed inside the component. The context of the javascript code (this)
 | 
				
			||||||
 | 
					 * will be the component instance created to compile the template. This means your javascript code can interact with the template.
 | 
				
			||||||
 | 
					 * The component instance will have most of the providers so you can use them in the javascript code. E.g. if you want to use
 | 
				
			||||||
 | 
					 * CoreAppProvider, you can do it with "this.CoreAppProvider".
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					@Component({
 | 
				
			||||||
 | 
					    selector: 'core-compile-html',
 | 
				
			||||||
 | 
					    template: '<core-loading [hideUntil]="loaded"><ng-container #dynamicComponent></ng-container></core-loading>',
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					// eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle
 | 
				
			||||||
 | 
					export class CoreCompileHtmlComponent implements OnChanges, OnDestroy, DoCheck {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Input() text!: string; // The HTML text to display.
 | 
				
			||||||
 | 
					    @Input() javascript?: string; // The Javascript to execute in the component.
 | 
				
			||||||
 | 
					    @Input() jsData?: Record<string, unknown>; // Data to pass to the fake component.
 | 
				
			||||||
 | 
					    @Input() extraImports: unknown[] = []; // Extra import modules.
 | 
				
			||||||
 | 
					    @Input() extraProviders: Type<unknown>[] = []; // Extra providers.
 | 
				
			||||||
 | 
					    @Input() forceCompile?: boolean; // Set it to true to force compile even if the text/javascript hasn't changed.
 | 
				
			||||||
 | 
					    @Output() created = new EventEmitter<unknown>(); // Will emit an event when the component is instantiated.
 | 
				
			||||||
 | 
					    @Output() compiling = new EventEmitter<boolean>(); // Event that indicates whether the template is being compiled.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Get the container where to put the content.
 | 
				
			||||||
 | 
					    @ViewChild('dynamicComponent', { read: ViewContainerRef }) container?: ViewContainerRef;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    loaded?: boolean;
 | 
				
			||||||
 | 
					    componentInstance?: any; // eslint-disable-line @typescript-eslint/no-explicit-any
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected componentRef?: ComponentRef<unknown>;
 | 
				
			||||||
 | 
					    protected element: HTMLElement;
 | 
				
			||||||
 | 
					    protected differ: KeyValueDiffer<unknown, unknown>; // To detect changes in the jsData input.
 | 
				
			||||||
 | 
					    protected creatingComponent = false;
 | 
				
			||||||
 | 
					    protected pendingCalls = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constructor(
 | 
				
			||||||
 | 
					        protected changeDetector: ChangeDetectorRef,
 | 
				
			||||||
 | 
					        element: ElementRef,
 | 
				
			||||||
 | 
					        differs: KeyValueDiffers,
 | 
				
			||||||
 | 
					    ) {
 | 
				
			||||||
 | 
					        this.element = element.nativeElement;
 | 
				
			||||||
 | 
					        this.differ = differs.find([]).create();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Detect and act upon changes that Angular can’t or won’t detect on its own (objects and arrays).
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    // eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle
 | 
				
			||||||
 | 
					    ngDoCheck(): void {
 | 
				
			||||||
 | 
					        if (!this.componentInstance || this.creatingComponent) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Check if there's any change in the jsData object.
 | 
				
			||||||
 | 
					        const changes = this.differ.diff(this.jsData || {});
 | 
				
			||||||
 | 
					        if (changes) {
 | 
				
			||||||
 | 
					            this.setInputData();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (this.componentInstance.ngOnChanges) {
 | 
				
			||||||
 | 
					                this.componentInstance.ngOnChanges(CoreDomUtils.createChangesFromKeyValueDiff(changes));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Detect changes on input properties.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    // eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle
 | 
				
			||||||
 | 
					    async ngOnChanges(changes: Record<string, SimpleChange>): Promise<void> {
 | 
				
			||||||
 | 
					        // Only compile if text/javascript has changed or the forceCompile flag has been set to true.
 | 
				
			||||||
 | 
					        if (this.text && (changes.text || changes.javascript ||
 | 
				
			||||||
 | 
					                (changes.forceCompile && CoreUtils.isTrueOrOne(this.forceCompile)))) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Create a new component and a new module.
 | 
				
			||||||
 | 
					            this.creatingComponent = true;
 | 
				
			||||||
 | 
					            this.compiling.emit(true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            try {
 | 
				
			||||||
 | 
					                const factory = await CoreCompile.createAndCompileComponent(
 | 
				
			||||||
 | 
					                    this.text,
 | 
				
			||||||
 | 
					                    this.getComponentClass(),
 | 
				
			||||||
 | 
					                    this.extraImports,
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // Destroy previous components.
 | 
				
			||||||
 | 
					                this.componentRef?.destroy();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (factory) {
 | 
				
			||||||
 | 
					                    // Create the component.
 | 
				
			||||||
 | 
					                    this.componentRef = this.container?.createComponent(factory);
 | 
				
			||||||
 | 
					                    this.componentRef && this.created.emit(this.componentRef.instance);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                this.loaded = true;
 | 
				
			||||||
 | 
					            } catch (error) {
 | 
				
			||||||
 | 
					                CoreDomUtils.showErrorModal(error);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                this.loaded = true;
 | 
				
			||||||
 | 
					            } finally {
 | 
				
			||||||
 | 
					                this.creatingComponent = false;
 | 
				
			||||||
 | 
					                this.compiling.emit(false);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Component destroyed.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    // eslint-disable-next-line @angular-eslint/no-conflicting-lifecycle
 | 
				
			||||||
 | 
					    ngOnDestroy(): void {
 | 
				
			||||||
 | 
					        this.componentRef?.destroy();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Get a class that defines the dynamic component.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return The component class.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected getComponentClass(): Type<unknown> {
 | 
				
			||||||
 | 
					        // eslint-disable-next-line @typescript-eslint/no-this-alias
 | 
				
			||||||
 | 
					        const compileInstance = this;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Create the component, using the text as the template.
 | 
				
			||||||
 | 
					        return class CoreCompileHtmlFakeComponent implements OnInit, AfterContentInit, AfterViewInit, OnDestroy {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            constructor() {
 | 
				
			||||||
 | 
					                // Store this instance so it can be accessed by the outer component.
 | 
				
			||||||
 | 
					                compileInstance.componentInstance = this;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // Create 2 empty properties that can be used by the template to store data.
 | 
				
			||||||
 | 
					                this['dataObject'] = {};
 | 
				
			||||||
 | 
					                this['dataArray'] = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // Inject the libraries.
 | 
				
			||||||
 | 
					                CoreCompile.injectLibraries(this, compileInstance.extraProviders);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // Always add these elements, they could be needed on component init (componentObservable).
 | 
				
			||||||
 | 
					                this['ChangeDetectorRef'] = compileInstance.changeDetector;
 | 
				
			||||||
 | 
					                this['componentContainer'] = compileInstance.element;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // Add the data passed to the component.
 | 
				
			||||||
 | 
					                compileInstance.setInputData();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * Component being initialized.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            ngOnInit(): void {
 | 
				
			||||||
 | 
					                // If there is some javascript to run, do it now.
 | 
				
			||||||
 | 
					                if (compileInstance.javascript) {
 | 
				
			||||||
 | 
					                    CoreCompile.executeJavascript(this, compileInstance.javascript);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // Call the pending functions.
 | 
				
			||||||
 | 
					                for (const name in compileInstance.pendingCalls) {
 | 
				
			||||||
 | 
					                    const pendingCall = compileInstance.pendingCalls[name];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (typeof this[name] == 'function') {
 | 
				
			||||||
 | 
					                        // Call the function.
 | 
				
			||||||
 | 
					                        Promise.resolve(this[name].apply(this, pendingCall.params)).then(pendingCall.defer.resolve)
 | 
				
			||||||
 | 
					                            .catch(pendingCall.defer.reject);
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
 | 
					                        // Function not defined, resolve the promise.
 | 
				
			||||||
 | 
					                        pendingCall.defer.resolve();
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                compileInstance.pendingCalls = {};
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * Content has been initialized.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            ngAfterContentInit(): void {
 | 
				
			||||||
 | 
					                // To be overridden.
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * View has been initialized.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            ngAfterViewInit(): void {
 | 
				
			||||||
 | 
					                // To be overridden.
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * Component destroyed.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            ngOnDestroy(): void {
 | 
				
			||||||
 | 
					                // To be overridden.
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Set the JS data as input data of the component instance.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected setInputData(): void {
 | 
				
			||||||
 | 
					        if (!this.componentInstance) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (const name in this.jsData) {
 | 
				
			||||||
 | 
					            this.componentInstance[name] = this.jsData[name];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Call a certain function on the component instance.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param name Name of the function to call.
 | 
				
			||||||
 | 
					     * @param params List of params to send to the function.
 | 
				
			||||||
 | 
					     * @param callWhenCreated If this param is true and the component hasn't been created yet, call the function
 | 
				
			||||||
 | 
					     *                        once the component has been created.
 | 
				
			||||||
 | 
					     * @return Result of the call. Undefined if no component instance or the function doesn't exist.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    callComponentFunction(name: string, params?: unknown[], callWhenCreated: boolean = true): unknown {
 | 
				
			||||||
 | 
					        if (this.componentInstance) {
 | 
				
			||||||
 | 
					            if (typeof this.componentInstance[name] == 'function') {
 | 
				
			||||||
 | 
					                return this.componentInstance[name].apply(this.componentInstance, params);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } else if (callWhenCreated) {
 | 
				
			||||||
 | 
					            // Call it when the component is created.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (this.pendingCalls[name]) {
 | 
				
			||||||
 | 
					                // Call already pending, just update the params (allow only 1 call per function until it's initialized).
 | 
				
			||||||
 | 
					                this.pendingCalls[name].params = params;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                return this.pendingCalls[name].defer.promise;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            const defer = CoreUtils.promiseDefer();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            this.pendingCalls[name] = {
 | 
				
			||||||
 | 
					                params,
 | 
				
			||||||
 | 
					                defer,
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return defer.promise;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										390
									
								
								src/core/features/compile/services/compile.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										390
									
								
								src/core/features/compile/services/compile.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,390 @@
 | 
				
			|||||||
 | 
					// (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 {
 | 
				
			||||||
 | 
					    Injectable,
 | 
				
			||||||
 | 
					    Injector,
 | 
				
			||||||
 | 
					    Component,
 | 
				
			||||||
 | 
					    NgModule,
 | 
				
			||||||
 | 
					    Compiler,
 | 
				
			||||||
 | 
					    ComponentFactory,
 | 
				
			||||||
 | 
					    ComponentRef,
 | 
				
			||||||
 | 
					    NgModuleRef,
 | 
				
			||||||
 | 
					    NO_ERRORS_SCHEMA,
 | 
				
			||||||
 | 
					    Type,
 | 
				
			||||||
 | 
					} from '@angular/core';
 | 
				
			||||||
 | 
					import { JitCompilerFactory } from '@angular/platform-browser-dynamic';
 | 
				
			||||||
 | 
					import {
 | 
				
			||||||
 | 
					    Platform,
 | 
				
			||||||
 | 
					    ActionSheetController,
 | 
				
			||||||
 | 
					    AlertController,
 | 
				
			||||||
 | 
					    LoadingController,
 | 
				
			||||||
 | 
					    ModalController,
 | 
				
			||||||
 | 
					    PopoverController,
 | 
				
			||||||
 | 
					    ToastController,
 | 
				
			||||||
 | 
					} from '@ionic/angular';
 | 
				
			||||||
 | 
					import { TranslateService } from '@ngx-translate/core';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { CoreLogger } from '@singletons/logger';
 | 
				
			||||||
 | 
					import { CoreEvents } from '@singletons/events';
 | 
				
			||||||
 | 
					import { makeSingleton } from '@singletons';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Import core services.
 | 
				
			||||||
 | 
					import { CORE_SERVICES } from '@/core/core.module';
 | 
				
			||||||
 | 
					import { CORE_BLOCK_SERVICES } from '@features/block/block.module';
 | 
				
			||||||
 | 
					import { CORE_COMMENTS_SERVICES } from '@features/comments/comments.module';
 | 
				
			||||||
 | 
					import { CORE_CONTENTLINKS_SERVICES } from '@features/contentlinks/contentlinks.module';
 | 
				
			||||||
 | 
					import { CORE_COURSE_SERVICES } from '@features/course/course.module';
 | 
				
			||||||
 | 
					import { CORE_COURSES_SERVICES } from '@features/courses/courses.module';
 | 
				
			||||||
 | 
					import { CORE_EDITOR_SERVICES } from '@features/editor/editor.module';
 | 
				
			||||||
 | 
					import { IONIC_NATIVE_SERVICES } from '@features/emulator/emulator.module';
 | 
				
			||||||
 | 
					import { CORE_FILEUPLOADER_SERVICES } from '@features/fileuploader/fileuploader.module';
 | 
				
			||||||
 | 
					import { CORE_FILTER_SERVICES } from '@features/filter/filter.module';
 | 
				
			||||||
 | 
					import { CORE_GRADES_SERVICES } from '@features/grades/grades.module';
 | 
				
			||||||
 | 
					import { CORE_H5P_SERVICES } from '@features/h5p/h5p.module';
 | 
				
			||||||
 | 
					import { CORE_LOGIN_SERVICES } from '@features/login/login.module';
 | 
				
			||||||
 | 
					import { CORE_MAINMENU_SERVICES } from '@features/mainmenu/mainmenu.module';
 | 
				
			||||||
 | 
					import { CORE_PUSHNOTIFICATIONS_SERVICES } from '@features/pushnotifications/pushnotifications.module';
 | 
				
			||||||
 | 
					import { CORE_QUESTION_SERVICES } from '@features/question/question.module';
 | 
				
			||||||
 | 
					// @todo import { CORE_SHAREDFILES_SERVICES } from '@features/sharedfiles/sharedfiles.module';
 | 
				
			||||||
 | 
					import { CORE_SEARCH_SERVICES } from '@features/search/search.module';
 | 
				
			||||||
 | 
					import { CORE_SETTINGS_SERVICES } from '@features/settings/settings.module';
 | 
				
			||||||
 | 
					import { CORE_SITEHOME_SERVICES } from '@features/sitehome/sitehome.module';
 | 
				
			||||||
 | 
					import { CORE_TAG_SERVICES } from '@features/tag/tag.module';
 | 
				
			||||||
 | 
					import { CORE_USER_SERVICES } from '@features/user/user.module';
 | 
				
			||||||
 | 
					import { CORE_XAPI_SERVICES } from '@features/xapi/xapi.module';
 | 
				
			||||||
 | 
					// @todo import { CoreSitePluginsProvider } from '@features/siteplugins/services/siteplugins';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Import other libraries and providers.
 | 
				
			||||||
 | 
					import { DomSanitizer } from '@angular/platform-browser';
 | 
				
			||||||
 | 
					import { FormBuilder, Validators } from '@angular/forms';
 | 
				
			||||||
 | 
					import { HttpClient } from '@angular/common/http';
 | 
				
			||||||
 | 
					import { CoreConstants } from '@/core/constants';
 | 
				
			||||||
 | 
					import moment from 'moment';
 | 
				
			||||||
 | 
					import { Md5 } from 'ts-md5/dist/md5';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Import core classes that can be useful for site plugins.
 | 
				
			||||||
 | 
					import { CoreSyncBaseProvider } from '@classes/base-sync';
 | 
				
			||||||
 | 
					import { CoreArray } from '@singletons/array';
 | 
				
			||||||
 | 
					import { CoreUrl } from '@singletons/url';
 | 
				
			||||||
 | 
					import { CoreWindow } from '@singletons/window';
 | 
				
			||||||
 | 
					import { CoreCache } from '@classes/cache';
 | 
				
			||||||
 | 
					import { CoreDelegate } from '@classes/delegate';
 | 
				
			||||||
 | 
					import { CoreContentLinksHandlerBase } from '@features/contentlinks/classes/base-handler';
 | 
				
			||||||
 | 
					import { CoreContentLinksModuleGradeHandler } from '@features/contentlinks/classes/module-grade-handler';
 | 
				
			||||||
 | 
					import { CoreContentLinksModuleIndexHandler } from '@features/contentlinks/classes/module-index-handler';
 | 
				
			||||||
 | 
					import { CoreCourseActivityPrefetchHandlerBase } from '@features/course/classes/activity-prefetch-handler';
 | 
				
			||||||
 | 
					import { CoreCourseResourcePrefetchHandlerBase } from '@features/course/classes/resource-prefetch-handler';
 | 
				
			||||||
 | 
					import { CoreGeolocationError, CoreGeolocationErrorReason } from '@services/geolocation';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Import all core modules that define components, directives and pipes.
 | 
				
			||||||
 | 
					import { CoreSharedModule } from '@/core/shared.module';
 | 
				
			||||||
 | 
					import { CoreCourseComponentsModule } from '@features/course/components/components.module';
 | 
				
			||||||
 | 
					import { CoreCourseDirectivesModule } from '@features/course/directives/directives.module';
 | 
				
			||||||
 | 
					import { CoreCoursesComponentsModule } from '@features/courses/components/components.module';
 | 
				
			||||||
 | 
					// @todo import { CoreSitePluginsDirectivesModule } from '@features/siteplugins/directives/directives.module';
 | 
				
			||||||
 | 
					import { CoreUserComponentsModule } from '@features/user/components/components.module';
 | 
				
			||||||
 | 
					import { CoreQuestionComponentsModule } from '@features/question/components/components.module';
 | 
				
			||||||
 | 
					import { CoreBlockComponentsModule } from '@features/block/components/components.module';
 | 
				
			||||||
 | 
					import { CoreEditorComponentsModule } from '@features/editor/components/components.module';
 | 
				
			||||||
 | 
					import { CoreSearchComponentsModule } from '@features/search/components/components.module';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Import some components so they can be injected dynamically.
 | 
				
			||||||
 | 
					import { CoreCourseUnsupportedModuleComponent } from '@features/course/components/unsupported-module/unsupported-module';
 | 
				
			||||||
 | 
					import { CoreCourseFormatSingleActivityComponent } from '@features/course/format/singleactivity/components/singleactivity';
 | 
				
			||||||
 | 
					// @todo
 | 
				
			||||||
 | 
					// import { CoreSitePluginsModuleIndexComponent } from '@features/siteplugins/components/module-index/module-index';
 | 
				
			||||||
 | 
					// import { CoreSitePluginsBlockComponent } from '@features/siteplugins/components/block/block';
 | 
				
			||||||
 | 
					// import { CoreSitePluginsCourseOptionComponent } from '@features/siteplugins/components/course-option/course-option';
 | 
				
			||||||
 | 
					// import { CoreSitePluginsCourseFormatComponent } from '@features/siteplugins/components/course-format/course-format';
 | 
				
			||||||
 | 
					// import { CoreSitePluginsQuestionComponent } from '@features/siteplugins/components/question/question';
 | 
				
			||||||
 | 
					// import { CoreSitePluginsQuestionBehaviourComponent } from '@features/siteplugins/components/question-behaviour/question-behaviour';
 | 
				
			||||||
 | 
					// import { CoreSitePluginsUserProfileFieldComponent } from '@features/siteplugins/components/user-profile-field/user-profile-field';
 | 
				
			||||||
 | 
					// import { CoreSitePluginsQuizAccessRuleComponent } from '@features/siteplugins/components/quiz-access-rule/quiz-access-rule';
 | 
				
			||||||
 | 
					// import { CoreSitePluginsAssignFeedbackComponent } from '@features/siteplugins/components/assign-feedback/assign-feedback';
 | 
				
			||||||
 | 
					// import { CoreSitePluginsAssignSubmissionComponent } from '@features/siteplugins/components/assign-submission/assign-submission';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Import addon providers. Do not import database module because it causes circular dependencies.
 | 
				
			||||||
 | 
					import { ADDON_BADGES_SERVICES } from '@addons/badges/badges.module';
 | 
				
			||||||
 | 
					import { ADDON_CALENDAR_SERVICES } from '@addons/calendar/calendar.module';
 | 
				
			||||||
 | 
					// @todo import { ADDON_COMPETENCY_SERVICES } from '@addons/competency/competency.module';
 | 
				
			||||||
 | 
					import { ADDON_MESSAGEOUTPUT_SERVICES } from '@addons/messageoutput/messageoutput.module';
 | 
				
			||||||
 | 
					import { ADDON_MESSAGES_SERVICES } from '@addons/messages/messages.module';
 | 
				
			||||||
 | 
					import { ADDON_MOD_ASSIGN_SERVICES } from '@addons/mod/assign/assign.module';
 | 
				
			||||||
 | 
					import { ADDON_MOD_BOOK_SERVICES } from '@addons/mod/book/book.module';
 | 
				
			||||||
 | 
					// @todo import { ADDON_MOD_CHAT_SERVICES } from '@addons/mod/chat/chat.module';
 | 
				
			||||||
 | 
					// @todo import { ADDON_MOD_CHOICE_SERVICES } from '@addons/mod/choice/choice.module';
 | 
				
			||||||
 | 
					// @todo import { ADDON_MOD_FEEDBACK_SERVICES } from '@addons/mod/feedback/feedback.module';
 | 
				
			||||||
 | 
					import { ADDON_MOD_FOLDER_SERVICES } from '@addons/mod/folder/folder.module';
 | 
				
			||||||
 | 
					import { ADDON_MOD_FORUM_SERVICES } from '@addons/mod/forum/forum.module';
 | 
				
			||||||
 | 
					// @todo import { ADDON_MOD_GLOSSARY_SERVICES } from '@addons/mod/glossary/glossary.module';
 | 
				
			||||||
 | 
					// @todo import { ADDON_MOD_H5P_ACTIVITY_SERVICES } from '@addons/mod/h5pactivity/h5pactivity.module';
 | 
				
			||||||
 | 
					import { ADDON_MOD_IMSCP_SERVICES } from '@addons/mod/imscp/imscp.module';
 | 
				
			||||||
 | 
					import { ADDON_MOD_LESSON_SERVICES } from '@addons/mod/lesson/lesson.module';
 | 
				
			||||||
 | 
					// @todo import { ADDON_MOD_LTI_SERVICES } from '@addons/mod/lti/lti.module';
 | 
				
			||||||
 | 
					import { ADDON_MOD_PAGE_SERVICES } from '@addons/mod/page/page.module';
 | 
				
			||||||
 | 
					import { ADDON_MOD_QUIZ_SERVICES } from '@addons/mod/quiz/quiz.module';
 | 
				
			||||||
 | 
					import { ADDON_MOD_RESOURCE_SERVICES } from '@addons/mod/resource/resource.module';
 | 
				
			||||||
 | 
					// @todo import { ADDON_MOD_SCORM_SERVICES } from '@addons/mod/scorm/scorm.module';
 | 
				
			||||||
 | 
					// @todo import { ADDON_MOD_SURVEY_SERVICES } from '@addons/mod/survey/survey.module';
 | 
				
			||||||
 | 
					import { ADDON_MOD_URL_SERVICES } from '@addons/mod/url/url.module';
 | 
				
			||||||
 | 
					// @todo import { ADDON_MOD_WIKI_SERVICES } from '@addons/mod/wiki/wiki.module';
 | 
				
			||||||
 | 
					// @todo import { ADDON_MOD_WORKSHOP_SERVICES } from '@addons/mod/workshop/workshop.module';
 | 
				
			||||||
 | 
					// @todo import { ADDON_NOTES_SERVICES } from '@addons/notes/notes.module';
 | 
				
			||||||
 | 
					import { ADDON_NOTIFICATIONS_SERVICES } from '@addons/notifications/notifications.module';
 | 
				
			||||||
 | 
					import { ADDON_PRIVATEFILES_SERVICES } from '@addons/privatefiles/privatefiles.module';
 | 
				
			||||||
 | 
					// @todo import { ADDON_REMOTETHEMES_SERVICES } from '@addons/remotethemes/remotethemes.module';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Import some addon modules that define components, directives and pipes. Only import the important ones.
 | 
				
			||||||
 | 
					import { AddonModAssignComponentsModule } from '@addons/mod/assign/components/components.module';
 | 
				
			||||||
 | 
					// @todo import { AddonModWorkshopComponentsModule } from '@addons/mod/workshop/components/components.module';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Service to provide functionalities regarding compiling dynamic HTML and Javascript.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					@Injectable({ providedIn: 'root' })
 | 
				
			||||||
 | 
					export class CoreCompileProvider {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected logger: CoreLogger;
 | 
				
			||||||
 | 
					    protected compiler: Compiler;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Other Ionic/Angular providers that don't depend on where they are injected.
 | 
				
			||||||
 | 
					    protected readonly OTHER_SERVICES: unknown[] = [
 | 
				
			||||||
 | 
					        TranslateService, HttpClient, Platform, DomSanitizer, ActionSheetController, AlertController, LoadingController,
 | 
				
			||||||
 | 
					        ModalController, PopoverController, ToastController, FormBuilder,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // List of imports for dynamic module. Since the template can have any component we need to import all core components modules.
 | 
				
			||||||
 | 
					    protected readonly IMPORTS = [
 | 
				
			||||||
 | 
					        CoreSharedModule, CoreCourseComponentsModule, CoreCoursesComponentsModule, CoreUserComponentsModule,
 | 
				
			||||||
 | 
					        CoreCourseDirectivesModule, CoreQuestionComponentsModule, AddonModAssignComponentsModule,
 | 
				
			||||||
 | 
					        CoreBlockComponentsModule, CoreEditorComponentsModule, CoreSearchComponentsModule,
 | 
				
			||||||
 | 
					        // @todo AddonModWorkshopComponentsModule, CoreSitePluginsDirectivesModule,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constructor(protected injector: Injector, compilerFactory: JitCompilerFactory) {
 | 
				
			||||||
 | 
					        this.logger = CoreLogger.getInstance('CoreCompileProvider');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.compiler = compilerFactory.createCompiler();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Create and compile a dynamic component.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param template The template of the component.
 | 
				
			||||||
 | 
					     * @param componentClass The JS class of the component.
 | 
				
			||||||
 | 
					     * @param extraImports Extra imported modules if needed and not imported by this class.
 | 
				
			||||||
 | 
					     * @return Promise resolved with the factory to instantiate the component.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    async createAndCompileComponent<T = unknown>(
 | 
				
			||||||
 | 
					        template: string,
 | 
				
			||||||
 | 
					        componentClass: Type<T>,
 | 
				
			||||||
 | 
					        extraImports: any[] = [], // eslint-disable-line @typescript-eslint/no-explicit-any
 | 
				
			||||||
 | 
					    ): Promise<ComponentFactory<T> | undefined> {
 | 
				
			||||||
 | 
					        // Create the component using the template and the class.
 | 
				
			||||||
 | 
					        const component = Component({ template })(componentClass);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const imports = [
 | 
				
			||||||
 | 
					            ...this.IMPORTS,
 | 
				
			||||||
 | 
					            ...extraImports,
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Now create the module containing the component.
 | 
				
			||||||
 | 
					        const module = NgModule({ imports, declarations: [component], schemas: [NO_ERRORS_SCHEMA] })(class {});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            // Compile the module and the component.
 | 
				
			||||||
 | 
					            const factories = await this.compiler.compileModuleAndAllComponentsAsync(module);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Search and return the factory of the component we just created.
 | 
				
			||||||
 | 
					            return factories.componentFactories.find(factory => factory.componentType == component);
 | 
				
			||||||
 | 
					        } catch (error) {
 | 
				
			||||||
 | 
					            this.logger.error('Error compiling template', template);
 | 
				
			||||||
 | 
					            this.logger.error(error);
 | 
				
			||||||
 | 
					            error.message = 'Template has some errors and cannot be displayed.';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            throw error;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Eval some javascript using the context of the function.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param javascript The javascript to eval.
 | 
				
			||||||
 | 
					     * @return Result of the eval.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected evalInContext(javascript: string): unknown {
 | 
				
			||||||
 | 
					        // eslint-disable-next-line no-eval
 | 
				
			||||||
 | 
					        return eval(javascript);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Execute some javascript code, using a certain instance as the context.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param instance Instance to use as the context. In the JS code, "this" will be this instance.
 | 
				
			||||||
 | 
					     * @param javascript The javascript code to eval.
 | 
				
			||||||
 | 
					     * @return Result of the javascript execution.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    executeJavascript(instance: unknown, javascript: string): unknown {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            return this.evalInContext.call(instance, javascript);
 | 
				
			||||||
 | 
					        } catch (ex) {
 | 
				
			||||||
 | 
					            this.logger.error('Error evaluating javascript', ex);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Inject all the core libraries in a certain object.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param instance The instance where to inject the libraries.
 | 
				
			||||||
 | 
					     * @param extraProviders Extra imported providers if needed and not imported by this class.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    // eslint-disable-next-line @typescript-eslint/no-explicit-any
 | 
				
			||||||
 | 
					    injectLibraries(instance: any, extraProviders: Type<unknown>[] = []): void {
 | 
				
			||||||
 | 
					        const providers = [
 | 
				
			||||||
 | 
					            ...CORE_SERVICES,
 | 
				
			||||||
 | 
					            ...CORE_BLOCK_SERVICES,
 | 
				
			||||||
 | 
					            ...CORE_COMMENTS_SERVICES,
 | 
				
			||||||
 | 
					            ...CORE_CONTENTLINKS_SERVICES,
 | 
				
			||||||
 | 
					            ...CORE_COURSE_SERVICES,
 | 
				
			||||||
 | 
					            ...CORE_COURSES_SERVICES,
 | 
				
			||||||
 | 
					            ...CORE_EDITOR_SERVICES,
 | 
				
			||||||
 | 
					            ...CORE_FILEUPLOADER_SERVICES,
 | 
				
			||||||
 | 
					            ...CORE_FILTER_SERVICES,
 | 
				
			||||||
 | 
					            ...CORE_GRADES_SERVICES,
 | 
				
			||||||
 | 
					            ...CORE_H5P_SERVICES,
 | 
				
			||||||
 | 
					            ...CORE_MAINMENU_SERVICES,
 | 
				
			||||||
 | 
					            ...CORE_LOGIN_SERVICES,
 | 
				
			||||||
 | 
					            ...CORE_QUESTION_SERVICES,
 | 
				
			||||||
 | 
					            ...CORE_PUSHNOTIFICATIONS_SERVICES,
 | 
				
			||||||
 | 
					            ...CORE_SEARCH_SERVICES,
 | 
				
			||||||
 | 
					            ...CORE_SETTINGS_SERVICES,
 | 
				
			||||||
 | 
					            // @todo ...CORE_SHAREDFILES_SERVICES,
 | 
				
			||||||
 | 
					            ...CORE_SITEHOME_SERVICES,
 | 
				
			||||||
 | 
					            // @todo ...CoreSitePluginsProvider,
 | 
				
			||||||
 | 
					            ...CORE_TAG_SERVICES,
 | 
				
			||||||
 | 
					            ...CORE_USER_SERVICES,
 | 
				
			||||||
 | 
					            ...CORE_XAPI_SERVICES,
 | 
				
			||||||
 | 
					            ...IONIC_NATIVE_SERVICES,
 | 
				
			||||||
 | 
					            ...this.OTHER_SERVICES,
 | 
				
			||||||
 | 
					            ...extraProviders,
 | 
				
			||||||
 | 
					            ...ADDON_BADGES_SERVICES,
 | 
				
			||||||
 | 
					            ...ADDON_CALENDAR_SERVICES,
 | 
				
			||||||
 | 
					            // @todo ...ADDON_COMPETENCY_SERVICES,
 | 
				
			||||||
 | 
					            ...ADDON_MESSAGEOUTPUT_SERVICES,
 | 
				
			||||||
 | 
					            ...ADDON_MESSAGES_SERVICES,
 | 
				
			||||||
 | 
					            ...ADDON_MOD_ASSIGN_SERVICES,
 | 
				
			||||||
 | 
					            ...ADDON_MOD_BOOK_SERVICES,
 | 
				
			||||||
 | 
					            // @todo ...ADDON_MOD_CHAT_SERVICES,
 | 
				
			||||||
 | 
					            // @todo ...ADDON_MOD_CHOICE_SERVICES,
 | 
				
			||||||
 | 
					            // @todo ...ADDON_MOD_FEEDBACK_SERVICES,
 | 
				
			||||||
 | 
					            ...ADDON_MOD_FOLDER_SERVICES,
 | 
				
			||||||
 | 
					            ...ADDON_MOD_FORUM_SERVICES,
 | 
				
			||||||
 | 
					            // @todo ...ADDON_MOD_GLOSSARY_SERVICES,
 | 
				
			||||||
 | 
					            // @todo ...ADDON_MOD_H5P_ACTIVITY_SERVICES,
 | 
				
			||||||
 | 
					            ...ADDON_MOD_IMSCP_SERVICES,
 | 
				
			||||||
 | 
					            ...ADDON_MOD_LESSON_SERVICES,
 | 
				
			||||||
 | 
					            // @todo ...ADDON_MOD_LTI_SERVICES,
 | 
				
			||||||
 | 
					            ...ADDON_MOD_PAGE_SERVICES,
 | 
				
			||||||
 | 
					            ...ADDON_MOD_QUIZ_SERVICES,
 | 
				
			||||||
 | 
					            ...ADDON_MOD_RESOURCE_SERVICES,
 | 
				
			||||||
 | 
					            // @todo ...ADDON_MOD_SCORM_SERVICES,
 | 
				
			||||||
 | 
					            // @todo ...ADDON_MOD_SURVEY_SERVICES,
 | 
				
			||||||
 | 
					            ...ADDON_MOD_URL_SERVICES,
 | 
				
			||||||
 | 
					            // @todo ...ADDON_MOD_WIKI_SERVICES,
 | 
				
			||||||
 | 
					            // @todo ...ADDON_MOD_WORKSHOP_SERVICES,
 | 
				
			||||||
 | 
					            // @todo ...ADDON_NOTES_SERVICES,
 | 
				
			||||||
 | 
					            ...ADDON_NOTIFICATIONS_SERVICES,
 | 
				
			||||||
 | 
					            ...ADDON_PRIVATEFILES_SERVICES,
 | 
				
			||||||
 | 
					            // @todo ...ADDON_REMOTETHEMES_SERVICES,
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // We cannot inject anything to this constructor. Use the Injector to inject all the providers into the instance.
 | 
				
			||||||
 | 
					        for (const i in providers) {
 | 
				
			||||||
 | 
					            const providerDef = providers[i];
 | 
				
			||||||
 | 
					            if (typeof providerDef == 'function' && providerDef.name) {
 | 
				
			||||||
 | 
					                try {
 | 
				
			||||||
 | 
					                    // Inject the provider to the instance. We use the class name as the property name.
 | 
				
			||||||
 | 
					                    instance[providerDef.name.replace(/DelegateService$/, 'Delegate')] = this.injector.get(providerDef);
 | 
				
			||||||
 | 
					                } catch (ex) {
 | 
				
			||||||
 | 
					                    this.logger.warn('Error injecting provider', providerDef.name, ex);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Inject current service.
 | 
				
			||||||
 | 
					        instance['CoreCompileProvider'] = this;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Add some final classes.
 | 
				
			||||||
 | 
					        instance['injector'] = this.injector;
 | 
				
			||||||
 | 
					        instance['Validators'] = Validators;
 | 
				
			||||||
 | 
					        instance['CoreConstants'] = CoreConstants;
 | 
				
			||||||
 | 
					        instance['CoreConfigConstants'] = CoreConstants.CONFIG;
 | 
				
			||||||
 | 
					        instance['CoreEventsProvider'] = CoreEvents;
 | 
				
			||||||
 | 
					        instance['CoreLoggerProvider'] = CoreLogger;
 | 
				
			||||||
 | 
					        instance['moment'] = moment;
 | 
				
			||||||
 | 
					        instance['Md5'] = Md5;
 | 
				
			||||||
 | 
					        instance['CoreSyncBaseProvider'] = CoreSyncBaseProvider;
 | 
				
			||||||
 | 
					        instance['CoreArray'] = CoreArray;
 | 
				
			||||||
 | 
					        instance['CoreUrl'] = CoreUrl;
 | 
				
			||||||
 | 
					        instance['CoreWindow'] = CoreWindow;
 | 
				
			||||||
 | 
					        instance['CoreCache'] = CoreCache;
 | 
				
			||||||
 | 
					        instance['CoreDelegate'] = CoreDelegate;
 | 
				
			||||||
 | 
					        instance['CoreContentLinksHandlerBase'] = CoreContentLinksHandlerBase;
 | 
				
			||||||
 | 
					        instance['CoreContentLinksModuleGradeHandler'] = CoreContentLinksModuleGradeHandler;
 | 
				
			||||||
 | 
					        instance['CoreContentLinksModuleIndexHandler'] = CoreContentLinksModuleIndexHandler;
 | 
				
			||||||
 | 
					        instance['CoreCourseActivityPrefetchHandlerBase'] = CoreCourseActivityPrefetchHandlerBase;
 | 
				
			||||||
 | 
					        instance['CoreCourseResourcePrefetchHandlerBase'] = CoreCourseResourcePrefetchHandlerBase;
 | 
				
			||||||
 | 
					        instance['CoreCourseUnsupportedModuleComponent'] = CoreCourseUnsupportedModuleComponent;
 | 
				
			||||||
 | 
					        instance['CoreCourseFormatSingleActivityComponent'] = CoreCourseFormatSingleActivityComponent;
 | 
				
			||||||
 | 
					        // @todo instance['CoreSitePluginsModuleIndexComponent'] = CoreSitePluginsModuleIndexComponent;
 | 
				
			||||||
 | 
					        // instance['CoreSitePluginsBlockComponent'] = CoreSitePluginsBlockComponent;
 | 
				
			||||||
 | 
					        // instance['CoreSitePluginsCourseOptionComponent'] = CoreSitePluginsCourseOptionComponent;
 | 
				
			||||||
 | 
					        // instance['CoreSitePluginsCourseFormatComponent'] = CoreSitePluginsCourseFormatComponent;
 | 
				
			||||||
 | 
					        // instance['CoreSitePluginsQuestionComponent'] = CoreSitePluginsQuestionComponent;
 | 
				
			||||||
 | 
					        // instance['CoreSitePluginsQuestionBehaviourComponent'] = CoreSitePluginsQuestionBehaviourComponent;
 | 
				
			||||||
 | 
					        // instance['CoreSitePluginsUserProfileFieldComponent'] = CoreSitePluginsUserProfileFieldComponent;
 | 
				
			||||||
 | 
					        // instance['CoreSitePluginsQuizAccessRuleComponent'] = CoreSitePluginsQuizAccessRuleComponent;
 | 
				
			||||||
 | 
					        // instance['CoreSitePluginsAssignFeedbackComponent'] = CoreSitePluginsAssignFeedbackComponent;
 | 
				
			||||||
 | 
					        // instance['CoreSitePluginsAssignSubmissionComponent'] = CoreSitePluginsAssignSubmissionComponent;
 | 
				
			||||||
 | 
					        instance['CoreGeolocationError'] = CoreGeolocationError;
 | 
				
			||||||
 | 
					        instance['CoreGeolocationErrorReason'] = CoreGeolocationErrorReason;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Instantiate a dynamic component.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param template The template of the component.
 | 
				
			||||||
 | 
					     * @param componentClass The JS class of the component.
 | 
				
			||||||
 | 
					     * @param injector The injector to use. It's recommended to pass it so NavController and similar can be injected.
 | 
				
			||||||
 | 
					     * @return Promise resolved with the component instance.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    async instantiateDynamicComponent<T = unknown>(
 | 
				
			||||||
 | 
					        template: string,
 | 
				
			||||||
 | 
					        componentClass: Type<T>,
 | 
				
			||||||
 | 
					        injector?: Injector,
 | 
				
			||||||
 | 
					    ): Promise<ComponentRef<T> | undefined> {
 | 
				
			||||||
 | 
					        injector = injector || this.injector;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const factory = await this.createAndCompileComponent(template, componentClass);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (factory) {
 | 
				
			||||||
 | 
					            // Create and return the component.
 | 
				
			||||||
 | 
					            return factory.create(injector, undefined, undefined, injector.get(NgModuleRef));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CoreCompile = makeSingleton(CoreCompileProvider);
 | 
				
			||||||
							
								
								
									
										31
									
								
								src/core/features/contentlinks/contentlinks.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								src/core/features/contentlinks/contentlinks.module.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					// (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, Type } from '@angular/core';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { CoreContentLinksDelegateService } from './services/contentlinks-delegate';
 | 
				
			||||||
 | 
					import { CoreContentLinksHelperProvider } from './services/contentlinks-helper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CORE_CONTENTLINKS_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    CoreContentLinksDelegateService,
 | 
				
			||||||
 | 
					    CoreContentLinksHelperProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@NgModule({
 | 
				
			||||||
 | 
					    declarations: [],
 | 
				
			||||||
 | 
					    imports: [],
 | 
				
			||||||
 | 
					    providers: [],
 | 
				
			||||||
 | 
					    exports: [],
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					export class CoreContentLinksModule {}
 | 
				
			||||||
@ -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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
					import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
				
			||||||
@ -24,14 +24,33 @@ import { SITE_SCHEMA, OFFLINE_SITE_SCHEMA } from './services/database/course';
 | 
				
			|||||||
import { SITE_SCHEMA as LOG_SITE_SCHEMA } from './services/database/log';
 | 
					import { SITE_SCHEMA as LOG_SITE_SCHEMA } from './services/database/log';
 | 
				
			||||||
import { SITE_SCHEMA as PREFETCH_SITE_SCHEMA } from './services/database/module-prefetch';
 | 
					import { SITE_SCHEMA as PREFETCH_SITE_SCHEMA } from './services/database/module-prefetch';
 | 
				
			||||||
import { CoreCourseIndexRoutingModule } from './pages/index/index-routing.module';
 | 
					import { CoreCourseIndexRoutingModule } from './pages/index/index-routing.module';
 | 
				
			||||||
import { CoreCourseModulePrefetchDelegate } from './services/module-prefetch-delegate';
 | 
					import { CoreCourseModulePrefetchDelegate, CoreCourseModulePrefetchDelegateService } from './services/module-prefetch-delegate';
 | 
				
			||||||
import { CoreCronDelegate } from '@services/cron';
 | 
					import { CoreCronDelegate } from '@services/cron';
 | 
				
			||||||
import { CoreCourseLogCronHandler } from './services/handlers/log-cron';
 | 
					import { CoreCourseLogCronHandler } from './services/handlers/log-cron';
 | 
				
			||||||
import { CoreCourseSyncCronHandler } from './services/handlers/sync-cron';
 | 
					import { CoreCourseSyncCronHandler } from './services/handlers/sync-cron';
 | 
				
			||||||
import { CoreTagAreaDelegate } from '@features/tag/services/tag-area-delegate';
 | 
					import { CoreTagAreaDelegate } from '@features/tag/services/tag-area-delegate';
 | 
				
			||||||
import { CoreCourseTagAreaHandler } from './services/handlers/course-tag-area';
 | 
					import { CoreCourseTagAreaHandler } from './services/handlers/course-tag-area';
 | 
				
			||||||
import { CoreCourseModulesTagAreaHandler } from './services/handlers/modules-tag-area';
 | 
					import { CoreCourseModulesTagAreaHandler } from './services/handlers/modules-tag-area';
 | 
				
			||||||
import { CoreCourse } from './services/course';
 | 
					import { CoreCourse, CoreCourseProvider } from './services/course';
 | 
				
			||||||
 | 
					import { CoreCourseHelperProvider } from './services/course-helper';
 | 
				
			||||||
 | 
					import { CoreCourseLogHelperProvider } from './services/log-helper';
 | 
				
			||||||
 | 
					import { CoreCourseFormatDelegateService } from './services/format-delegate';
 | 
				
			||||||
 | 
					import { CoreCourseModuleDelegateService } from './services/module-delegate';
 | 
				
			||||||
 | 
					import { CoreCourseOptionsDelegateService } from './services/course-options-delegate';
 | 
				
			||||||
 | 
					import { CoreCourseOfflineProvider } from './services/course-offline';
 | 
				
			||||||
 | 
					import { CoreCourseSyncProvider } from './services/sync';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CORE_COURSE_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    CoreCourseProvider,
 | 
				
			||||||
 | 
					    CoreCourseHelperProvider,
 | 
				
			||||||
 | 
					    CoreCourseLogHelperProvider,
 | 
				
			||||||
 | 
					    CoreCourseFormatDelegateService,
 | 
				
			||||||
 | 
					    CoreCourseModuleDelegateService,
 | 
				
			||||||
 | 
					    CoreCourseModulePrefetchDelegateService,
 | 
				
			||||||
 | 
					    CoreCourseOptionsDelegateService,
 | 
				
			||||||
 | 
					    CoreCourseOfflineProvider,
 | 
				
			||||||
 | 
					    CoreCourseSyncProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -12,13 +12,16 @@
 | 
				
			|||||||
// 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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
					import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreMainMenuHomeRoutingModule } from '@features/mainmenu/pages/home/home-routing.module';
 | 
					import { CoreMainMenuHomeRoutingModule } from '@features/mainmenu/pages/home/home-routing.module';
 | 
				
			||||||
import { CoreMainMenuHomeDelegate } from '@features/mainmenu/services/home-delegate';
 | 
					import { CoreMainMenuHomeDelegate } from '@features/mainmenu/services/home-delegate';
 | 
				
			||||||
import { CorePushNotificationsDelegate } from '@features/pushnotifications/services/push-delegate';
 | 
					import { CorePushNotificationsDelegate } from '@features/pushnotifications/services/push-delegate';
 | 
				
			||||||
 | 
					import { CoreCoursesProvider } from './services/courses';
 | 
				
			||||||
 | 
					import { CoreCoursesHelperProvider } from './services/courses-helper';
 | 
				
			||||||
 | 
					import { CoreCoursesDashboardProvider } from './services/dashboard';
 | 
				
			||||||
import { CoreCoursesCourseLinkHandler } from './services/handlers/course-link';
 | 
					import { CoreCoursesCourseLinkHandler } from './services/handlers/course-link';
 | 
				
			||||||
import { CoreCoursesIndexLinkHandler } from './services/handlers/courses-index-link';
 | 
					import { CoreCoursesIndexLinkHandler } from './services/handlers/courses-index-link';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -28,6 +31,12 @@ import { CoreCoursesEnrolPushClickHandler } from './services/handlers/enrol-push
 | 
				
			|||||||
import { CoreCoursesMyCoursesHomeHandler, CoreCoursesMyCoursesHomeHandlerService } from './services/handlers/my-courses-home';
 | 
					import { CoreCoursesMyCoursesHomeHandler, CoreCoursesMyCoursesHomeHandlerService } from './services/handlers/my-courses-home';
 | 
				
			||||||
import { CoreCoursesRequestPushClickHandler } from './services/handlers/request-push-click';
 | 
					import { CoreCoursesRequestPushClickHandler } from './services/handlers/request-push-click';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CORE_COURSES_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    CoreCoursesProvider,
 | 
				
			||||||
 | 
					    CoreCoursesDashboardProvider,
 | 
				
			||||||
 | 
					    CoreCoursesHelperProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const mainMenuHomeChildrenRoutes: Routes = [
 | 
					const mainMenuHomeChildrenRoutes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        path: '',
 | 
					        path: '',
 | 
				
			||||||
 | 
				
			|||||||
@ -12,11 +12,16 @@
 | 
				
			|||||||
// 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 { NgModule } from '@angular/core';
 | 
					import { NgModule, Type } from '@angular/core';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
					import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
				
			||||||
import { CoreEditorComponentsModule } from './components/components.module';
 | 
					import { CoreEditorComponentsModule } from './components/components.module';
 | 
				
			||||||
import { SITE_SCHEMA } from './services/database/editor';
 | 
					import { SITE_SCHEMA } from './services/database/editor';
 | 
				
			||||||
 | 
					import { CoreEditorOfflineProvider } from './services/editor-offline';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CORE_EDITOR_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    CoreEditorOfflineProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    declarations: [
 | 
					    declarations: [
 | 
				
			||||||
 | 
				
			|||||||
@ -45,6 +45,33 @@ import { StatusBar } from '@ionic-native/status-bar/ngx';
 | 
				
			|||||||
import { WebIntent } from '@ionic-native/web-intent/ngx';
 | 
					import { WebIntent } from '@ionic-native/web-intent/ngx';
 | 
				
			||||||
import { Zip } from '@ionic-native/zip/ngx';
 | 
					import { Zip } from '@ionic-native/zip/ngx';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const IONIC_NATIVE_SERVICES = [
 | 
				
			||||||
 | 
					    Badge,
 | 
				
			||||||
 | 
					    Camera,
 | 
				
			||||||
 | 
					    Chooser,
 | 
				
			||||||
 | 
					    Clipboard,
 | 
				
			||||||
 | 
					    Device,
 | 
				
			||||||
 | 
					    Diagnostic,
 | 
				
			||||||
 | 
					    File,
 | 
				
			||||||
 | 
					    FileOpener,
 | 
				
			||||||
 | 
					    FileTransfer,
 | 
				
			||||||
 | 
					    Geolocation,
 | 
				
			||||||
 | 
					    HTTP,
 | 
				
			||||||
 | 
					    InAppBrowser,
 | 
				
			||||||
 | 
					    Keyboard,
 | 
				
			||||||
 | 
					    LocalNotifications,
 | 
				
			||||||
 | 
					    Media,
 | 
				
			||||||
 | 
					    MediaCapture,
 | 
				
			||||||
 | 
					    Network,
 | 
				
			||||||
 | 
					    Push,
 | 
				
			||||||
 | 
					    QRScanner,
 | 
				
			||||||
 | 
					    SplashScreen,
 | 
				
			||||||
 | 
					    StatusBar,
 | 
				
			||||||
 | 
					    SQLite,
 | 
				
			||||||
 | 
					    WebIntent,
 | 
				
			||||||
 | 
					    WebView,
 | 
				
			||||||
 | 
					    Zip,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
// Mock services.
 | 
					// Mock services.
 | 
				
			||||||
import { CameraMock } from './services/camera';
 | 
					import { CameraMock } from './services/camera';
 | 
				
			||||||
import { ClipboardMock } from './services/clipboard';
 | 
					import { ClipboardMock } from './services/clipboard';
 | 
				
			||||||
 | 
				
			|||||||
@ -12,15 +12,22 @@
 | 
				
			|||||||
// 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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreFileUploaderDelegate } from './services/fileuploader-delegate';
 | 
					import { CoreFileUploaderProvider } from './services/fileuploader';
 | 
				
			||||||
 | 
					import { CoreFileUploaderDelegate, CoreFileUploaderDelegateService } from './services/fileuploader-delegate';
 | 
				
			||||||
 | 
					import { CoreFileUploaderHelperProvider } from './services/fileuploader-helper';
 | 
				
			||||||
import { CoreFileUploaderAlbumHandler } from './services/handlers/album';
 | 
					import { CoreFileUploaderAlbumHandler } from './services/handlers/album';
 | 
				
			||||||
import { CoreFileUploaderAudioHandler } from './services/handlers/audio';
 | 
					import { CoreFileUploaderAudioHandler } from './services/handlers/audio';
 | 
				
			||||||
import { CoreFileUploaderCameraHandler } from './services/handlers/camera';
 | 
					import { CoreFileUploaderCameraHandler } from './services/handlers/camera';
 | 
				
			||||||
import { CoreFileUploaderFileHandler } from './services/handlers/file';
 | 
					import { CoreFileUploaderFileHandler } from './services/handlers/file';
 | 
				
			||||||
import { CoreFileUploaderVideoHandler } from './services/handlers/video';
 | 
					import { CoreFileUploaderVideoHandler } from './services/handlers/video';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CORE_FILEUPLOADER_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    CoreFileUploaderProvider,
 | 
				
			||||||
 | 
					    CoreFileUploaderHelperProvider,
 | 
				
			||||||
 | 
					    CoreFileUploaderDelegateService,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [],
 | 
					    imports: [],
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										31
									
								
								src/core/features/filter/filter.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								src/core/features/filter/filter.module.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					// (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, Type } from '@angular/core';
 | 
				
			||||||
 | 
					import { CoreFilterProvider } from './services/filter';
 | 
				
			||||||
 | 
					import { CoreFilterDelegateService } from './services/filter-delegate';
 | 
				
			||||||
 | 
					import { CoreFilterHelperProvider } from './services/filter-helper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CORE_FILTER_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    CoreFilterProvider,
 | 
				
			||||||
 | 
					    CoreFilterDelegateService,
 | 
				
			||||||
 | 
					    CoreFilterHelperProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@NgModule({
 | 
				
			||||||
 | 
					    declarations: [],
 | 
				
			||||||
 | 
					    imports: [],
 | 
				
			||||||
 | 
					    providers: [],
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					export class CoreFilterModule { }
 | 
				
			||||||
@ -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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
					import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
				
			||||||
import { CoreCourseIndexRoutingModule } from '@features/course/pages/index/index-routing.module';
 | 
					import { CoreCourseIndexRoutingModule } from '@features/course/pages/index/index-routing.module';
 | 
				
			||||||
@ -21,12 +21,19 @@ import { CoreMainMenuRoutingModule } from '@features/mainmenu/mainmenu-routing.m
 | 
				
			|||||||
import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
					import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
				
			||||||
import { CoreMainMenuDelegate } from '@features/mainmenu/services/mainmenu-delegate';
 | 
					import { CoreMainMenuDelegate } from '@features/mainmenu/services/mainmenu-delegate';
 | 
				
			||||||
import { CoreUserDelegate } from '@features/user/services/user-delegate';
 | 
					import { CoreUserDelegate } from '@features/user/services/user-delegate';
 | 
				
			||||||
 | 
					import { CoreGradesProvider } from './services/grades';
 | 
				
			||||||
 | 
					import { CoreGradesHelperProvider } from './services/grades-helper';
 | 
				
			||||||
import { CoreGradesCourseOptionHandler } from './services/handlers/course-option';
 | 
					import { CoreGradesCourseOptionHandler } from './services/handlers/course-option';
 | 
				
			||||||
import { CoreGradesMainMenuHandler, CoreGradesMainMenuHandlerService } from './services/handlers/mainmenu';
 | 
					import { CoreGradesMainMenuHandler, CoreGradesMainMenuHandlerService } from './services/handlers/mainmenu';
 | 
				
			||||||
import { CoreGradesOverviewLinkHandler } from './services/handlers/overview-link';
 | 
					import { CoreGradesOverviewLinkHandler } from './services/handlers/overview-link';
 | 
				
			||||||
import { CoreGradesUserHandler } from './services/handlers/user';
 | 
					import { CoreGradesUserHandler } from './services/handlers/user';
 | 
				
			||||||
import { CoreGradesUserLinkHandler } from './services/handlers/user-link';
 | 
					import { CoreGradesUserLinkHandler } from './services/handlers/user-link';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CORE_GRADES_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    CoreGradesProvider,
 | 
				
			||||||
 | 
					    CoreGradesHelperProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        path: CoreGradesMainMenuHandlerService.PAGE_NAME,
 | 
					        path: CoreGradesMainMenuHandlerService.PAGE_NAME,
 | 
				
			||||||
 | 
				
			|||||||
@ -12,14 +12,19 @@
 | 
				
			|||||||
// 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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CorePluginFileDelegate } from '@services/plugin-file-delegate';
 | 
					import { CorePluginFileDelegate } from '@services/plugin-file-delegate';
 | 
				
			||||||
import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
					import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
				
			||||||
import { CoreH5PComponentsModule } from './components/components.module';
 | 
					import { CoreH5PComponentsModule } from './components/components.module';
 | 
				
			||||||
import { SITE_SCHEMA } from './services/database/h5p';
 | 
					import { SITE_SCHEMA } from './services/database/h5p';
 | 
				
			||||||
 | 
					import { CoreH5PProvider } from './services/h5p';
 | 
				
			||||||
import { CoreH5PPluginFileHandler } from './services/handlers/pluginfile';
 | 
					import { CoreH5PPluginFileHandler } from './services/handlers/pluginfile';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CORE_H5P_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    CoreH5PProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					    imports: [
 | 
				
			||||||
        CoreH5PComponentsModule,
 | 
					        CoreH5PComponentsModule,
 | 
				
			||||||
 | 
				
			|||||||
@ -16,6 +16,11 @@ import { NgModule } from '@angular/core';
 | 
				
			|||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { AppRoutingModule } from '@/app/app-routing.module';
 | 
					import { AppRoutingModule } from '@/app/app-routing.module';
 | 
				
			||||||
 | 
					import { CoreLoginHelperProvider } from './services/login-helper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CORE_LOGIN_SERVICES = [
 | 
				
			||||||
 | 
					    CoreLoginHelperProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const appRoutes: Routes = [
 | 
					const appRoutes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -18,8 +18,16 @@ import { CoreMainMenuAuthGuard } from '@features/mainmenu/guards/auth';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { AppRoutingModule } from '@/app/app-routing.module';
 | 
					import { AppRoutingModule } from '@/app/app-routing.module';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreMainMenuDelegate } from './services/mainmenu-delegate';
 | 
					import { CoreMainMenuDelegate, CoreMainMenuDelegateService } from './services/mainmenu-delegate';
 | 
				
			||||||
import { CoreMainMenuHomeHandler } from './services/handlers/mainmenu';
 | 
					import { CoreMainMenuHomeHandler } from './services/handlers/mainmenu';
 | 
				
			||||||
 | 
					import { CoreMainMenuProvider } from './services/mainmenu';
 | 
				
			||||||
 | 
					import { CoreMainMenuHomeDelegateService } from './services/home-delegate';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CORE_MAINMENU_SERVICES = [
 | 
				
			||||||
 | 
					    CoreMainMenuHomeDelegateService,
 | 
				
			||||||
 | 
					    CoreMainMenuDelegateService,
 | 
				
			||||||
 | 
					    CoreMainMenuProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const appRoutes: Routes = [
 | 
					const appRoutes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -12,14 +12,20 @@
 | 
				
			|||||||
// 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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreCronDelegate } from '@services/cron';
 | 
					import { CoreCronDelegate } from '@services/cron';
 | 
				
			||||||
import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
					import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
				
			||||||
import { SITE_SCHEMA } from './services/database/pushnotifications';
 | 
					import { SITE_SCHEMA } from './services/database/pushnotifications';
 | 
				
			||||||
import { CorePushNotificationsRegisterCronHandler } from './services/handlers/register-cron';
 | 
					import { CorePushNotificationsRegisterCronHandler } from './services/handlers/register-cron';
 | 
				
			||||||
import { CorePushNotificationsUnregisterCronHandler } from './services/handlers/unregister-cron';
 | 
					import { CorePushNotificationsUnregisterCronHandler } from './services/handlers/unregister-cron';
 | 
				
			||||||
import { CorePushNotifications } from './services/pushnotifications';
 | 
					import { CorePushNotificationsDelegateService } from './services/push-delegate';
 | 
				
			||||||
 | 
					import { CorePushNotifications, CorePushNotificationsProvider } from './services/pushnotifications';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CORE_PUSHNOTIFICATIONS_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    CorePushNotificationsProvider,
 | 
				
			||||||
 | 
					    CorePushNotificationsDelegateService,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    declarations: [
 | 
					    declarations: [
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										34
									
								
								src/core/features/question/question.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								src/core/features/question/question.module.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					// (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, Type } from '@angular/core';
 | 
				
			||||||
 | 
					import { CoreQuestionBehaviourDelegateService } from './services/behaviour-delegate';
 | 
				
			||||||
 | 
					import { CoreQuestionProvider } from './services/question';
 | 
				
			||||||
 | 
					import { CoreQuestionDelegateService } from './services/question-delegate';
 | 
				
			||||||
 | 
					import { CoreQuestionHelperProvider } from './services/question-helper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CORE_QUESTION_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    CoreQuestionProvider,
 | 
				
			||||||
 | 
					    CoreQuestionDelegateService,
 | 
				
			||||||
 | 
					    CoreQuestionBehaviourDelegateService,
 | 
				
			||||||
 | 
					    CoreQuestionHelperProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@NgModule({
 | 
				
			||||||
 | 
					    declarations: [],
 | 
				
			||||||
 | 
					    imports: [],
 | 
				
			||||||
 | 
					    providers: [],
 | 
				
			||||||
 | 
					    exports: [],
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					export class CoreQuestionModule {}
 | 
				
			||||||
@ -12,12 +12,17 @@
 | 
				
			|||||||
// 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 { NgModule } from '@angular/core';
 | 
					import { NgModule, Type } from '@angular/core';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
					import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreSearchComponentsModule } from './components/components.module';
 | 
					import { CoreSearchComponentsModule } from './components/components.module';
 | 
				
			||||||
import { SITE_SCHEMA } from './services/search-history-db';
 | 
					import { SITE_SCHEMA } from './services/search-history-db';
 | 
				
			||||||
 | 
					import { CoreSearchHistoryProvider } from './services/search-history.service';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CORE_SEARCH_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    CoreSearchHistoryProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [
 | 
					    imports: [
 | 
				
			||||||
 | 
				
			|||||||
@ -12,13 +12,18 @@
 | 
				
			|||||||
// 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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { AppRoutingModule } from '@/app/app-routing.module';
 | 
					import { AppRoutingModule } from '@/app/app-routing.module';
 | 
				
			||||||
import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
					import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
				
			||||||
 | 
					 | 
				
			||||||
import { CoreSettingsHelperProvider } from './services/settings-helper';
 | 
					import { CoreSettingsHelperProvider } from './services/settings-helper';
 | 
				
			||||||
 | 
					import { CoreSettingsDelegateService } from './services/settings-delegate';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CORE_SETTINGS_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    CoreSettingsDelegateService,
 | 
				
			||||||
 | 
					    CoreSettingsHelperProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const appRoutes: Routes = [
 | 
					const appRoutes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreSiteHomeIndexLinkHandler } from './services/handlers/index-link';
 | 
					import { CoreSiteHomeIndexLinkHandler } from './services/handlers/index-link';
 | 
				
			||||||
@ -20,6 +20,11 @@ import { CoreContentLinksDelegate } from '@features/contentlinks/services/conten
 | 
				
			|||||||
import { CoreSiteHomeHomeHandler, CoreSiteHomeHomeHandlerService } from './services/handlers/sitehome-home';
 | 
					import { CoreSiteHomeHomeHandler, CoreSiteHomeHomeHandlerService } from './services/handlers/sitehome-home';
 | 
				
			||||||
import { CoreMainMenuHomeDelegate } from '@features/mainmenu/services/home-delegate';
 | 
					import { CoreMainMenuHomeDelegate } from '@features/mainmenu/services/home-delegate';
 | 
				
			||||||
import { CoreMainMenuHomeRoutingModule } from '@features/mainmenu/pages/home/home-routing.module';
 | 
					import { CoreMainMenuHomeRoutingModule } from '@features/mainmenu/pages/home/home-routing.module';
 | 
				
			||||||
 | 
					import { CoreSiteHomeProvider } from './services/sitehome';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CORE_SITEHOME_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    CoreSiteHomeProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const mainMenuHomeRoutes: Routes = [
 | 
					const mainMenuHomeRoutes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
import { CoreMainMenuDelegate } from '@features/mainmenu/services/mainmenu-delegate';
 | 
					import { CoreMainMenuDelegate } from '@features/mainmenu/services/mainmenu-delegate';
 | 
				
			||||||
import { CoreMainMenuRoutingModule } from '../mainmenu/mainmenu-routing.module';
 | 
					import { CoreMainMenuRoutingModule } from '../mainmenu/mainmenu-routing.module';
 | 
				
			||||||
@ -22,6 +22,15 @@ import { CoreTagIndexLinkHandler } from './services/handlers/index-link';
 | 
				
			|||||||
import { CoreTagSearchLinkHandler } from './services/handlers/search-link';
 | 
					import { CoreTagSearchLinkHandler } from './services/handlers/search-link';
 | 
				
			||||||
import { CoreTagComponentsModule } from './components/components.module';
 | 
					import { CoreTagComponentsModule } from './components/components.module';
 | 
				
			||||||
import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
					import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
				
			||||||
 | 
					import { CoreTagAreaDelegateService } from './services/tag-area-delegate';
 | 
				
			||||||
 | 
					import { CoreTagHelperProvider } from './services/tag-helper';
 | 
				
			||||||
 | 
					import { CoreTagProvider } from './services/tag';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CORE_TAG_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    CoreTagAreaDelegateService,
 | 
				
			||||||
 | 
					    CoreTagHelperProvider,
 | 
				
			||||||
 | 
					    CoreTagProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -12,14 +12,14 @@
 | 
				
			|||||||
// 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 { APP_INITIALIZER, NgModule } from '@angular/core';
 | 
					import { APP_INITIALIZER, NgModule, Type } from '@angular/core';
 | 
				
			||||||
import { Routes } from '@angular/router';
 | 
					import { Routes } from '@angular/router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
					import { CoreMainMenuTabRoutingModule } from '@features/mainmenu/mainmenu-tab-routing.module';
 | 
				
			||||||
import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
					import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
				
			||||||
import { SITE_SCHEMA, OFFLINE_SITE_SCHEMA } from './services/database/user';
 | 
					import { SITE_SCHEMA, OFFLINE_SITE_SCHEMA } from './services/database/user';
 | 
				
			||||||
import { CoreUserComponentsModule } from './components/components.module';
 | 
					import { CoreUserComponentsModule } from './components/components.module';
 | 
				
			||||||
import { CoreUserDelegate } from './services/user-delegate';
 | 
					import { CoreUserDelegate, CoreUserDelegateService } from './services/user-delegate';
 | 
				
			||||||
import { CoreUserProfileMailHandler } from './services/handlers/profile-mail';
 | 
					import { CoreUserProfileMailHandler } from './services/handlers/profile-mail';
 | 
				
			||||||
import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
					import { CoreContentLinksDelegate } from '@features/contentlinks/services/contentlinks-delegate';
 | 
				
			||||||
import { CoreUserProfileLinkHandler } from './services/handlers/profile-link';
 | 
					import { CoreUserProfileLinkHandler } from './services/handlers/profile-link';
 | 
				
			||||||
@ -30,6 +30,20 @@ import { CoreTagAreaDelegate } from '@features/tag/services/tag-area-delegate';
 | 
				
			|||||||
import { CoreCourseIndexRoutingModule } from '@features/course/pages/index/index-routing.module';
 | 
					import { CoreCourseIndexRoutingModule } from '@features/course/pages/index/index-routing.module';
 | 
				
			||||||
import { CoreCourseOptionsDelegate } from '@features/course/services/course-options-delegate';
 | 
					import { CoreCourseOptionsDelegate } from '@features/course/services/course-options-delegate';
 | 
				
			||||||
import { CoreUserCourseOptionHandler } from './services/handlers/course-option';
 | 
					import { CoreUserCourseOptionHandler } from './services/handlers/course-option';
 | 
				
			||||||
 | 
					import { CoreUserProfileFieldDelegateService } from './services/user-profile-field-delegate';
 | 
				
			||||||
 | 
					import { CoreUserProvider } from './services/user';
 | 
				
			||||||
 | 
					import { CoreUserHelperProvider } from './services/user-helper';
 | 
				
			||||||
 | 
					import { CoreUserOfflineProvider } from './services/user-offline';
 | 
				
			||||||
 | 
					import { CoreUserSyncProvider } from './services/user-sync';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CORE_USER_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    CoreUserDelegateService,
 | 
				
			||||||
 | 
					    CoreUserProfileFieldDelegateService,
 | 
				
			||||||
 | 
					    CoreUserProvider,
 | 
				
			||||||
 | 
					    CoreUserHelperProvider,
 | 
				
			||||||
 | 
					    CoreUserOfflineProvider,
 | 
				
			||||||
 | 
					    CoreUserSyncProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Routes = [
 | 
					const routes: Routes = [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
@ -12,10 +12,17 @@
 | 
				
			|||||||
// 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 { NgModule } from '@angular/core';
 | 
					import { NgModule, Type } from '@angular/core';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
					import { CORE_SITE_SCHEMAS } from '@services/sites';
 | 
				
			||||||
import { SITE_SCHEMA } from './services/database/xapi';
 | 
					import { SITE_SCHEMA } from './services/database/xapi';
 | 
				
			||||||
 | 
					import { CoreXAPIOfflineProvider } from './services/offline';
 | 
				
			||||||
 | 
					import { CoreXAPIProvider } from './services/xapi';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const CORE_XAPI_SERVICES: Type<unknown>[] = [
 | 
				
			||||||
 | 
					    CoreXAPIProvider,
 | 
				
			||||||
 | 
					    CoreXAPIOfflineProvider,
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@NgModule({
 | 
					@NgModule({
 | 
				
			||||||
    imports: [],
 | 
					    imports: [],
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user