forked from CIT/Vmeda.Online
		
	MOBILE-3565 settings: Add licenses page
This commit is contained in:
		
							parent
							
								
									f09c3f9210
								
							
						
					
					
						commit
						51fba1f5d8
					
				@ -13,14 +13,14 @@
 | 
				
			|||||||
// limitations under the License.
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { CoreApp } from '@services/app';
 | 
					import { CoreApp } from '@services/app';
 | 
				
			||||||
import { Component } from '@angular/core';
 | 
					import { Component, OnInit } from '@angular/core';
 | 
				
			||||||
import { ActivatedRoute, Params, Router } from '@angular/router';
 | 
					import { ActivatedRoute, Params, Router } from '@angular/router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Component({
 | 
					@Component({
 | 
				
			||||||
    selector: 'app-settings',
 | 
					    selector: 'app-settings',
 | 
				
			||||||
    templateUrl: 'app.html',
 | 
					    templateUrl: 'app.html',
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
export class CoreSettingsAppPage {
 | 
					export class CoreSettingsAppPage implements OnInit {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // @ViewChild(CoreSplitViewComponent) splitviewCtrl?: CoreSplitViewComponent;
 | 
					    // @ViewChild(CoreSplitViewComponent) splitviewCtrl?: CoreSplitViewComponent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -42,7 +42,7 @@ export class CoreSettingsAppPage {
 | 
				
			|||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * View loaded.
 | 
					     * View loaded.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    ionViewDidLoad(): void {
 | 
					    ngOnInit(): void {
 | 
				
			||||||
        if (this.selectedPage) {
 | 
					        if (this.selectedPage) {
 | 
				
			||||||
            this.openSettings(this.selectedPage);
 | 
					            this.openSettings(this.selectedPage);
 | 
				
			||||||
        } /* else if (this.splitviewCtrl!.isOn()) {
 | 
					        } /* else if (this.splitviewCtrl!.isOn()) {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										41
									
								
								src/app/core/settings/pages/licenses/licenses.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								src/app/core/settings/pages/licenses/licenses.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,41 @@
 | 
				
			|||||||
 | 
					<ion-header>
 | 
				
			||||||
 | 
					    <ion-toolbar>
 | 
				
			||||||
 | 
					        <ion-buttons slot="start">
 | 
				
			||||||
 | 
					            <ion-back-button [attr.aria-label]="'core.back' | translate"></ion-back-button>
 | 
				
			||||||
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <ion-title>{{ 'core.settings.opensourcelicenses' | translate }}</ion-title>
 | 
				
			||||||
 | 
					    </ion-toolbar>
 | 
				
			||||||
 | 
					</ion-header>
 | 
				
			||||||
 | 
					<ion-content>
 | 
				
			||||||
 | 
					    <core-loading [hideUntil]="loaded">
 | 
				
			||||||
 | 
					        <ion-item button *ngIf="error" class="ion-text-wrap" [href]="licensesUrl" core-link auto-login="no">
 | 
				
			||||||
 | 
					            <ion-label>
 | 
				
			||||||
 | 
					                {{ 'core.settings.opensourcelicenses' | translate }}
 | 
				
			||||||
 | 
					            </ion-label>
 | 
				
			||||||
 | 
					            <ion-button [href]="licensesUrl" target="_blank" fill="clear" slot="end" core-link auto-login="no">
 | 
				
			||||||
 | 
					                {{ 'core.view' | translate }}</ion-button>
 | 
				
			||||||
 | 
					        </ion-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <ng-container *ngIf="!error">
 | 
				
			||||||
 | 
					            <ion-item *ngFor="let license of licenses" class="ion-text-wrap">
 | 
				
			||||||
 | 
					                <ion-label>
 | 
				
			||||||
 | 
					                    <h2>
 | 
				
			||||||
 | 
					                        <a *ngIf="license.repository" [href]="license.repository" core-link
 | 
				
			||||||
 | 
					                            auto-login="no">{{ license.name }}</a>
 | 
				
			||||||
 | 
					                        <ng-container *ngIf="!license.repository">{{ license.name }}</ng-container> - {{ license.version }}
 | 
				
			||||||
 | 
					                    </h2>
 | 
				
			||||||
 | 
					                    <h3 *ngIf="license.publisher">
 | 
				
			||||||
 | 
					                        {{ 'core.settings.publisher' | translate }}{{ 'core.labelsep' | translate }} {{ license.publisher }}
 | 
				
			||||||
 | 
					                    </h3>
 | 
				
			||||||
 | 
					                    <p>{{ 'core.settings.license' | translate }}{{ 'core.labelsep' | translate }} {{ license.licenses }}</p>
 | 
				
			||||||
 | 
					                    <p><a *ngIf="license.url" [href]="license.url" core-link auto-login="no">{{ license.url }}</a></p>
 | 
				
			||||||
 | 
					                    <p><a *ngIf="license.email" [href]="'mailto:' + license.email" core-link
 | 
				
			||||||
 | 
					                            auto-login="no">{{ license.email }}</a></p>
 | 
				
			||||||
 | 
					                </ion-label>
 | 
				
			||||||
 | 
					                <ion-button *ngIf="license.licenseUrl" [href]="license.licenseUrl" target="_blank"
 | 
				
			||||||
 | 
					                    fill="clear" slot="end" core-link auto-login="no">{{ 'core.view' | translate }}</ion-button>
 | 
				
			||||||
 | 
					            </ion-item>
 | 
				
			||||||
 | 
					        </ng-container>
 | 
				
			||||||
 | 
					    </core-loading>
 | 
				
			||||||
 | 
					</ion-content>
 | 
				
			||||||
							
								
								
									
										48
									
								
								src/app/core/settings/pages/licenses/licenses.page.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								src/app/core/settings/pages/licenses/licenses.page.module.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,48 @@
 | 
				
			|||||||
 | 
					// (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 { TranslateModule } from '@ngx-translate/core';
 | 
				
			||||||
 | 
					import { RouterModule, Routes } from '@angular/router';
 | 
				
			||||||
 | 
					import { CommonModule } from '@angular/common';
 | 
				
			||||||
 | 
					import { IonicModule } from '@ionic/angular';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { CoreComponentsModule } from '@components/components.module';
 | 
				
			||||||
 | 
					import { CoreDirectivesModule } from '@directives/directives.module';
 | 
				
			||||||
 | 
					import { CorePipesModule } from '@pipes/pipes.module';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { CoreSettingsLicensesPage } from './licenses.page';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const routes: Routes = [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        path: '',
 | 
				
			||||||
 | 
					        component: CoreSettingsLicensesPage,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@NgModule({
 | 
				
			||||||
 | 
					    declarations: [
 | 
				
			||||||
 | 
					        CoreSettingsLicensesPage,
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    imports: [
 | 
				
			||||||
 | 
					        RouterModule.forChild(routes),
 | 
				
			||||||
 | 
					        CommonModule,
 | 
				
			||||||
 | 
					        IonicModule,
 | 
				
			||||||
 | 
					        TranslateModule.forChild(),
 | 
				
			||||||
 | 
					        CoreComponentsModule,
 | 
				
			||||||
 | 
					        CoreDirectivesModule,
 | 
				
			||||||
 | 
					        CorePipesModule,
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					export class CoreSettingsLicensesPageModule {}
 | 
				
			||||||
							
								
								
									
										88
									
								
								src/app/core/settings/pages/licenses/licenses.page.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								src/app/core/settings/pages/licenses/licenses.page.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,88 @@
 | 
				
			|||||||
 | 
					// (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, OnInit } from '@angular/core';
 | 
				
			||||||
 | 
					import { CoreConstants } from '@core/constants';
 | 
				
			||||||
 | 
					import { Http } from '@/app/singletons/core.singletons';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Defines license info
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					interface CoreSettingsLicense {
 | 
				
			||||||
 | 
					    name: string;
 | 
				
			||||||
 | 
					    version: string;
 | 
				
			||||||
 | 
					    licenses: string;
 | 
				
			||||||
 | 
					    repository?: string;
 | 
				
			||||||
 | 
					    publisher?: string;
 | 
				
			||||||
 | 
					    url?: string;
 | 
				
			||||||
 | 
					    email?: string;
 | 
				
			||||||
 | 
					    licenseUrl?: string;
 | 
				
			||||||
 | 
					    licenseFile?: string;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Page that displays the open source licenses information.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					@Component({
 | 
				
			||||||
 | 
					    selector: 'page-core-settings-licenses',
 | 
				
			||||||
 | 
					    templateUrl: 'licenses.html',
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					export class CoreSettingsLicensesPage implements OnInit {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    licensesUrl: string;
 | 
				
			||||||
 | 
					    loaded = false;
 | 
				
			||||||
 | 
					    licenses: CoreSettingsLicense[] = [];
 | 
				
			||||||
 | 
					    error = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constructor() {
 | 
				
			||||||
 | 
					        let version = 'v' + CoreConstants.CONFIG.versionname;
 | 
				
			||||||
 | 
					        if (version.indexOf('-') > 0) {
 | 
				
			||||||
 | 
					            version = 'integration';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.licensesUrl = 'https://raw.githubusercontent.com/moodlehq/moodleapp/' + version + '/licenses.json';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * View loaded.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    async ngOnInit(): Promise<void> {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            const licenses = await Http.instance.get(this.licensesUrl).toPromise();
 | 
				
			||||||
 | 
					            this.licenses = Object.keys(licenses).map((name) => {
 | 
				
			||||||
 | 
					                const license = licenses[name];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                const nameSplit = name.lastIndexOf('@');
 | 
				
			||||||
 | 
					                license.name = name.substring(0, nameSplit);
 | 
				
			||||||
 | 
					                license.version = name.substring(nameSplit + 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (license.repository) {
 | 
				
			||||||
 | 
					                    license.repository = license.repository.replace('git://', 'https://');
 | 
				
			||||||
 | 
					                    if (license.repository.indexOf('github.com') > 0) {
 | 
				
			||||||
 | 
					                        license.licenseUrl = license.repository + '/blob/' + license.version + '/' + license.licenseFile;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                return license;
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            this.error = false;
 | 
				
			||||||
 | 
					        } catch {
 | 
				
			||||||
 | 
					            this.error = true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.loaded = true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -24,6 +24,10 @@ const routes: Routes = [
 | 
				
			|||||||
        path: 'general',
 | 
					        path: 'general',
 | 
				
			||||||
        loadChildren: () => import('./pages/general/general.page.module').then( m => m.CoreSettingsGeneralPageModule),
 | 
					        loadChildren: () => import('./pages/general/general.page.module').then( m => m.CoreSettingsGeneralPageModule),
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        path: 'licenses',
 | 
				
			||||||
 | 
					        loadChildren: () => import('./pages/licenses/licenses.page.module').then( m => m.CoreSettingsLicensesPageModule),
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        path: '',
 | 
					        path: '',
 | 
				
			||||||
        loadChildren: () => import('./pages/app/app.page.module').then( m => m.CoreSettingsAppPageModule),
 | 
					        loadChildren: () => import('./pages/app/app.page.module').then( m => m.CoreSettingsAppPageModule),
 | 
				
			||||||
 | 
				
			|||||||
@ -44,7 +44,7 @@ export class CoreFaIconDirective implements OnChanges {
 | 
				
			|||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Detect icon name and use svg.
 | 
					     * Detect icon name and use svg.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    setIcon(): void {
 | 
					    async setIcon(): Promise<void> {
 | 
				
			||||||
        let library = 'ionic';
 | 
					        let library = 'ionic';
 | 
				
			||||||
        let iconName = this.name;
 | 
					        let iconName = this.name;
 | 
				
			||||||
        const parts = iconName.split('-', 2);
 | 
					        const parts = iconName.split('-', 2);
 | 
				
			||||||
@ -73,13 +73,11 @@ export class CoreFaIconDirective implements OnChanges {
 | 
				
			|||||||
            this.element.setAttribute('src', src);
 | 
					            this.element.setAttribute('src', src);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (CoreConstants.BUILD.isDevelopment || CoreConstants.BUILD.isTesting) {
 | 
					            if (CoreConstants.BUILD.isDevelopment || CoreConstants.BUILD.isTesting) {
 | 
				
			||||||
                Http.instance.get(src).subscribe(() => {
 | 
					                try {
 | 
				
			||||||
                    // Ignore.
 | 
					                    await Http.instance.get(src, { responseType: 'text' }).toPromise();
 | 
				
			||||||
                }, (error) => {
 | 
					                } catch (error) {
 | 
				
			||||||
                    if (error.status != 200) {
 | 
					                    this.logger.error(`Icon ${this.name} not found`);
 | 
				
			||||||
                        this.logger.error(`Icon ${this.name} not found`);
 | 
					                }
 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            this.element.removeAttribute('src');
 | 
					            this.element.removeAttribute('src');
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user