forked from EVOgeek/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