Trying to build a webui using Ionic & Angular
This commit is contained in:
		
							parent
							
								
									c0cf27780d
								
							
						
					
					
						commit
						00e601e246
					
				
							
								
								
									
										17
									
								
								ui/.browserslistrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								ui/.browserslistrc
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below. | ||||||
|  | # For additional information regarding the format and rule options, please see: | ||||||
|  | # https://github.com/browserslist/browserslist#queries | ||||||
|  | 
 | ||||||
|  | # For the full list of supported browsers by the Angular framework, please see: | ||||||
|  | # https://angular.io/guide/browser-support | ||||||
|  | 
 | ||||||
|  | # You can see what browsers were selected by your queries by running: | ||||||
|  | #   npx browserslist | ||||||
|  | 
 | ||||||
|  | last 1 Chrome version | ||||||
|  | last 1 Firefox version | ||||||
|  | last 2 Edge major versions | ||||||
|  | last 2 Safari major versions | ||||||
|  | last 2 iOS major versions | ||||||
|  | Firefox ESR | ||||||
|  | not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line. | ||||||
							
								
								
									
										16
									
								
								ui/.editorconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								ui/.editorconfig
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | |||||||
|  | # Editor configuration, see https://editorconfig.org | ||||||
|  | root = true | ||||||
|  | 
 | ||||||
|  | [*] | ||||||
|  | charset = utf-8 | ||||||
|  | indent_style = space | ||||||
|  | indent_size = 2 | ||||||
|  | insert_final_newline = true | ||||||
|  | trim_trailing_whitespace = true | ||||||
|  | 
 | ||||||
|  | [*.ts] | ||||||
|  | quote_type = single | ||||||
|  | 
 | ||||||
|  | [*.md] | ||||||
|  | max_line_length = off | ||||||
|  | trim_trailing_whitespace = false | ||||||
							
								
								
									
										47
									
								
								ui/.eslintrc.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								ui/.eslintrc.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,47 @@ | |||||||
|  | { | ||||||
|  |   "root": true, | ||||||
|  |   "ignorePatterns": ["projects/**/*"], | ||||||
|  |   "overrides": [ | ||||||
|  |     { | ||||||
|  |       "files": ["*.ts"], | ||||||
|  |       "parserOptions": { | ||||||
|  |         "project": ["tsconfig.json", "e2e/tsconfig.json"], | ||||||
|  |         "createDefaultProgram": true | ||||||
|  |       }, | ||||||
|  |       "extends": [ | ||||||
|  |         "plugin:@angular-eslint/ng-cli-compat", | ||||||
|  |         "plugin:@angular-eslint/ng-cli-compat--formatting-add-on", | ||||||
|  |         "plugin:@angular-eslint/template/process-inline-templates" | ||||||
|  |       ], | ||||||
|  |       "rules": { | ||||||
|  |         "@angular-eslint/component-class-suffix": [ | ||||||
|  |           "error", | ||||||
|  |           { | ||||||
|  |             "suffixes": ["Page", "Component"] | ||||||
|  |           } | ||||||
|  |         ], | ||||||
|  |         "@angular-eslint/component-selector": [ | ||||||
|  |           "error", | ||||||
|  |           { | ||||||
|  |             "type": "element", | ||||||
|  |             "prefix": "app", | ||||||
|  |             "style": "kebab-case" | ||||||
|  |           } | ||||||
|  |         ], | ||||||
|  |         "@angular-eslint/directive-selector": [ | ||||||
|  |           "error", | ||||||
|  |           { | ||||||
|  |             "type": "attribute", | ||||||
|  |             "prefix": "app", | ||||||
|  |             "style": "camelCase" | ||||||
|  |           } | ||||||
|  |         ] | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "files": ["*.html"], | ||||||
|  |       "extends": ["plugin:@angular-eslint/template/recommended"], | ||||||
|  |       "rules": {} | ||||||
|  |     } | ||||||
|  |   ] | ||||||
|  | } | ||||||
							
								
								
									
										32
									
								
								ui/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								ui/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,32 @@ | |||||||
|  | # Specifies intentionally untracked files to ignore when using Git | ||||||
|  | # http://git-scm.com/docs/gitignore | ||||||
|  | 
 | ||||||
|  | *~ | ||||||
|  | *.sw[mnpcod] | ||||||
|  | .tmp | ||||||
|  | *.tmp | ||||||
|  | *.tmp.* | ||||||
|  | *.sublime-project | ||||||
|  | *.sublime-workspace | ||||||
|  | .DS_Store | ||||||
|  | Thumbs.db | ||||||
|  | UserInterfaceState.xcuserstate | ||||||
|  | $RECYCLE.BIN/ | ||||||
|  | 
 | ||||||
|  | *.log | ||||||
|  | log.txt | ||||||
|  | npm-debug.log* | ||||||
|  | 
 | ||||||
|  | /.angular | ||||||
|  | /.idea | ||||||
|  | /.ionic | ||||||
|  | /.sass-cache | ||||||
|  | /.sourcemaps | ||||||
|  | /.versions | ||||||
|  | /.vscode | ||||||
|  | /coverage | ||||||
|  | /dist | ||||||
|  | /node_modules | ||||||
|  | /platforms | ||||||
|  | /plugins | ||||||
|  | /www | ||||||
							
								
								
									
										162
									
								
								ui/angular.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										162
									
								
								ui/angular.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,162 @@ | |||||||
|  | { | ||||||
|  |   "$schema": "./node_modules/@angular/cli/lib/config/schema.json", | ||||||
|  |   "version": 1, | ||||||
|  |   "newProjectRoot": "projects", | ||||||
|  |   "projects": { | ||||||
|  |     "app": { | ||||||
|  |       "root": "", | ||||||
|  |       "sourceRoot": "src", | ||||||
|  |       "projectType": "application", | ||||||
|  |       "prefix": "app", | ||||||
|  |       "schematics": {}, | ||||||
|  |       "architect": { | ||||||
|  |         "build": { | ||||||
|  |           "builder": "@angular-devkit/build-angular:browser", | ||||||
|  |           "options": { | ||||||
|  |             "outputPath": "www", | ||||||
|  |             "index": "src/index.html", | ||||||
|  |             "main": "src/main.ts", | ||||||
|  |             "polyfills": "src/polyfills.ts", | ||||||
|  |             "tsConfig": "tsconfig.app.json", | ||||||
|  |             "assets": [ | ||||||
|  |               { | ||||||
|  |                 "glob": "**/*", | ||||||
|  |                 "input": "src/assets", | ||||||
|  |                 "output": "assets" | ||||||
|  |               }, | ||||||
|  |               { | ||||||
|  |                 "glob": "**/*.svg", | ||||||
|  |                 "input": "node_modules/ionicons/dist/ionicons/svg", | ||||||
|  |                 "output": "./svg" | ||||||
|  |               } | ||||||
|  |             ], | ||||||
|  |             "styles": ["src/theme/variables.scss", "src/global.scss"], | ||||||
|  |             "scripts": [], | ||||||
|  |             "aot": false, | ||||||
|  |             "vendorChunk": true, | ||||||
|  |             "extractLicenses": false, | ||||||
|  |             "buildOptimizer": false, | ||||||
|  |             "sourceMap": true, | ||||||
|  |             "optimization": false, | ||||||
|  |             "namedChunks": true | ||||||
|  |           }, | ||||||
|  |           "configurations": { | ||||||
|  |             "production": { | ||||||
|  |               "fileReplacements": [ | ||||||
|  |                 { | ||||||
|  |                   "replace": "src/environments/environment.ts", | ||||||
|  |                   "with": "src/environments/environment.prod.ts" | ||||||
|  |                 } | ||||||
|  |               ], | ||||||
|  |               "optimization": true, | ||||||
|  |               "outputHashing": "all", | ||||||
|  |               "sourceMap": false, | ||||||
|  |               "namedChunks": false, | ||||||
|  |               "aot": true, | ||||||
|  |               "extractLicenses": true, | ||||||
|  |               "vendorChunk": false, | ||||||
|  |               "buildOptimizer": true, | ||||||
|  |               "budgets": [ | ||||||
|  |                 { | ||||||
|  |                   "type": "initial", | ||||||
|  |                   "maximumWarning": "2mb", | ||||||
|  |                   "maximumError": "5mb" | ||||||
|  |                 } | ||||||
|  |               ] | ||||||
|  |             }, | ||||||
|  |             "ci": { | ||||||
|  |               "progress": false | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "serve": { | ||||||
|  |           "builder": "@angular-devkit/build-angular:dev-server", | ||||||
|  |           "options": { | ||||||
|  |             "browserTarget": "app:build" | ||||||
|  |           }, | ||||||
|  |           "configurations": { | ||||||
|  |             "production": { | ||||||
|  |               "browserTarget": "app:build:production" | ||||||
|  |             }, | ||||||
|  |             "ci": { | ||||||
|  |               "progress": false | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "extract-i18n": { | ||||||
|  |           "builder": "@angular-devkit/build-angular:extract-i18n", | ||||||
|  |           "options": { | ||||||
|  |             "browserTarget": "app:build" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "test": { | ||||||
|  |           "builder": "@angular-devkit/build-angular:karma", | ||||||
|  |           "options": { | ||||||
|  |             "main": "src/test.ts", | ||||||
|  |             "polyfills": "src/polyfills.ts", | ||||||
|  |             "tsConfig": "tsconfig.spec.json", | ||||||
|  |             "karmaConfig": "karma.conf.js", | ||||||
|  |             "styles": [], | ||||||
|  |             "scripts": [], | ||||||
|  |             "assets": [ | ||||||
|  |               { | ||||||
|  |                 "glob": "favicon.ico", | ||||||
|  |                 "input": "src/", | ||||||
|  |                 "output": "/" | ||||||
|  |               }, | ||||||
|  |               { | ||||||
|  |                 "glob": "**/*", | ||||||
|  |                 "input": "src/assets", | ||||||
|  |                 "output": "/assets" | ||||||
|  |               } | ||||||
|  |             ] | ||||||
|  |           }, | ||||||
|  |           "configurations": { | ||||||
|  |             "ci": { | ||||||
|  |               "progress": false, | ||||||
|  |               "watch": false | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "lint": { | ||||||
|  |           "builder": "@angular-eslint/builder:lint", | ||||||
|  |           "options": { | ||||||
|  |             "lintFilePatterns": [ | ||||||
|  |               "src/**/*.ts", | ||||||
|  |               "src/**/*.html" | ||||||
|  |             ] | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "e2e": { | ||||||
|  |           "builder": "@angular-devkit/build-angular:protractor", | ||||||
|  |           "options": { | ||||||
|  |             "protractorConfig": "e2e/protractor.conf.js", | ||||||
|  |             "devServerTarget": "app:serve" | ||||||
|  |           }, | ||||||
|  |           "configurations": { | ||||||
|  |             "production": { | ||||||
|  |               "devServerTarget": "app:serve:production" | ||||||
|  |             }, | ||||||
|  |             "ci": { | ||||||
|  |               "devServerTarget": "app:serve:ci" | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "cli": { | ||||||
|  |     "schematicCollections": [ | ||||||
|  |       "@ionic/angular-toolkit" | ||||||
|  |     ], | ||||||
|  |     "analytics": "9e99e173-a30e-4ae7-bef6-c6526435ef32" | ||||||
|  |   }, | ||||||
|  |   "schematics": { | ||||||
|  |     "@ionic/angular-toolkit:component": { | ||||||
|  |       "styleext": "scss" | ||||||
|  |     }, | ||||||
|  |     "@ionic/angular-toolkit:page": { | ||||||
|  |       "styleext": "scss" | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										10
									
								
								ui/capacitor.config.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								ui/capacitor.config.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | |||||||
|  | import { CapacitorConfig } from '@capacitor/cli'; | ||||||
|  | 
 | ||||||
|  | const config: CapacitorConfig = { | ||||||
|  |   appId: 'io.ionic.starter', | ||||||
|  |   appName: 'ui', | ||||||
|  |   webDir: 'www', | ||||||
|  |   bundledWebRuntime: false | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | export default config; | ||||||
							
								
								
									
										37
									
								
								ui/e2e/protractor.conf.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								ui/e2e/protractor.conf.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,37 @@ | |||||||
|  | // @ts-check
 | ||||||
|  | // Protractor configuration file, see link for more information
 | ||||||
|  | // https://github.com/angular/protractor/blob/master/lib/config.ts
 | ||||||
|  | 
 | ||||||
|  | const { SpecReporter, StacktraceOption } = require('jasmine-spec-reporter'); | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @type { import("protractor").Config } | ||||||
|  |  */ | ||||||
|  | exports.config = { | ||||||
|  |   allScriptsTimeout: 11000, | ||||||
|  |   specs: [ | ||||||
|  |     './src/**/*.e2e-spec.ts' | ||||||
|  |   ], | ||||||
|  |   capabilities: { | ||||||
|  |     browserName: 'chrome' | ||||||
|  |   }, | ||||||
|  |   directConnect: true, | ||||||
|  |   SELENIUM_PROMISE_MANAGER: false, | ||||||
|  |   baseUrl: 'http://localhost:4200/', | ||||||
|  |   framework: 'jasmine', | ||||||
|  |   jasmineNodeOpts: { | ||||||
|  |     showColors: true, | ||||||
|  |     defaultTimeoutInterval: 30000, | ||||||
|  |     print: function() {} | ||||||
|  |   }, | ||||||
|  |   onPrepare() { | ||||||
|  |     require('ts-node').register({ | ||||||
|  |       project: require('path').join(__dirname, './tsconfig.json') | ||||||
|  |     }); | ||||||
|  |     jasmine.getEnv().addReporter(new SpecReporter({ | ||||||
|  |       spec: { | ||||||
|  |         displayStacktrace: StacktraceOption.PRETTY | ||||||
|  |       } | ||||||
|  |     })); | ||||||
|  |   } | ||||||
|  | }; | ||||||
							
								
								
									
										17
									
								
								ui/e2e/src/app.e2e-spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								ui/e2e/src/app.e2e-spec.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | import { AppPage } from './app.po'; | ||||||
|  | 
 | ||||||
|  | describe('new App', () => { | ||||||
|  |   let page: AppPage; | ||||||
|  | 
 | ||||||
|  |   beforeEach(() => { | ||||||
|  |     page = new AppPage(); | ||||||
|  |   }); | ||||||
|  |   describe('default screen', () => { | ||||||
|  |     beforeEach(() => { | ||||||
|  |       page.navigateTo('/Inbox'); | ||||||
|  |     }); | ||||||
|  |     it('should say Inbox', () => { | ||||||
|  |       expect(page.getParagraphText()).toContain('Inbox'); | ||||||
|  |     }); | ||||||
|  |   }); | ||||||
|  | }); | ||||||
							
								
								
									
										11
									
								
								ui/e2e/src/app.po.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								ui/e2e/src/app.po.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | |||||||
|  | import { browser, by, element } from 'protractor'; | ||||||
|  | 
 | ||||||
|  | export class AppPage { | ||||||
|  |   navigateTo(destination) { | ||||||
|  |     return browser.get(destination); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   getParagraphText() { | ||||||
|  |     return element(by.deepCss('app-root ion-content')).getText(); | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										12
									
								
								ui/e2e/tsconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								ui/e2e/tsconfig.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | |||||||
|  | { | ||||||
|  |   "extends": "../tsconfig.json", | ||||||
|  |   "compilerOptions": { | ||||||
|  |     "outDir": "../out-tsc/e2e", | ||||||
|  |     "module": "commonjs", | ||||||
|  |     "target": "es2018", | ||||||
|  |     "types": [ | ||||||
|  |       "jasmine", | ||||||
|  |       "node" | ||||||
|  |     ] | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										7
									
								
								ui/ionic.config.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								ui/ionic.config.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | { | ||||||
|  |   "name": "ui", | ||||||
|  |   "integrations": { | ||||||
|  |     "capacitor": {} | ||||||
|  |   }, | ||||||
|  |   "type": "angular" | ||||||
|  | } | ||||||
							
								
								
									
										44
									
								
								ui/karma.conf.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								ui/karma.conf.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,44 @@ | |||||||
|  | // Karma configuration file, see link for more information
 | ||||||
|  | // https://karma-runner.github.io/1.0/config/configuration-file.html
 | ||||||
|  | 
 | ||||||
|  | module.exports = function (config) { | ||||||
|  |   config.set({ | ||||||
|  |     basePath: '', | ||||||
|  |     frameworks: ['jasmine', '@angular-devkit/build-angular'], | ||||||
|  |     plugins: [ | ||||||
|  |       require('karma-jasmine'), | ||||||
|  |       require('karma-chrome-launcher'), | ||||||
|  |       require('karma-jasmine-html-reporter'), | ||||||
|  |       require('karma-coverage'), | ||||||
|  |       require('@angular-devkit/build-angular/plugins/karma') | ||||||
|  |     ], | ||||||
|  |     client: { | ||||||
|  |       jasmine: { | ||||||
|  |         // you can add configuration options for Jasmine here
 | ||||||
|  |         // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
 | ||||||
|  |         // for example, you can disable the random execution with `random: false`
 | ||||||
|  |         // or set a specific seed with `seed: 4321`
 | ||||||
|  |       }, | ||||||
|  |       clearContext: false // leave Jasmine Spec Runner output visible in browser
 | ||||||
|  |     }, | ||||||
|  |     jasmineHtmlReporter: { | ||||||
|  |       suppressAll: true // removes the duplicated traces
 | ||||||
|  |     }, | ||||||
|  |     coverageReporter: { | ||||||
|  |       dir: require('path').join(__dirname, './coverage/ngv'), | ||||||
|  |       subdir: '.', | ||||||
|  |       reporters: [ | ||||||
|  |         { type: 'html' }, | ||||||
|  |         { type: 'text-summary' } | ||||||
|  |       ] | ||||||
|  |     }, | ||||||
|  |     reporters: ['progress', 'kjhtml'], | ||||||
|  |     port: 9876, | ||||||
|  |     colors: true, | ||||||
|  |     logLevel: config.LOG_INFO, | ||||||
|  |     autoWatch: true, | ||||||
|  |     browsers: ['Chrome'], | ||||||
|  |     singleRun: false, | ||||||
|  |     restartOnFileChange: true | ||||||
|  |   }); | ||||||
|  | }; | ||||||
							
								
								
									
										29475
									
								
								ui/package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										29475
									
								
								ui/package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										66
									
								
								ui/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								ui/package.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,66 @@ | |||||||
|  | { | ||||||
|  |   "name": "ui", | ||||||
|  |   "version": "0.0.1", | ||||||
|  |   "author": "Ionic Framework", | ||||||
|  |   "homepage": "https://ionicframework.com/", | ||||||
|  |   "scripts": { | ||||||
|  |     "ng": "ng", | ||||||
|  |     "start": "ng serve", | ||||||
|  |     "build": "ng build", | ||||||
|  |     "test": "ng test", | ||||||
|  |     "lint": "ng lint", | ||||||
|  |     "e2e": "ng e2e" | ||||||
|  |   }, | ||||||
|  |   "private": true, | ||||||
|  |   "dependencies": { | ||||||
|  |     "@angular/common": "^14.0.0", | ||||||
|  |     "@angular/core": "^14.0.0", | ||||||
|  |     "@angular/forms": "^14.0.0", | ||||||
|  |     "@angular/platform-browser": "^14.0.0", | ||||||
|  |     "@angular/platform-browser-dynamic": "^14.0.0", | ||||||
|  |     "@angular/router": "^14.0.0", | ||||||
|  |     "@capacitor/app": "1.1.1", | ||||||
|  |     "@capacitor/core": "3.6.0", | ||||||
|  |     "@capacitor/haptics": "1.1.4", | ||||||
|  |     "@capacitor/keyboard": "1.2.3", | ||||||
|  |     "@capacitor/status-bar": "1.0.8", | ||||||
|  |     "@ionic/angular": "^6.1.9", | ||||||
|  |     "rxjs": "~6.6.0", | ||||||
|  |     "tslib": "^2.2.0", | ||||||
|  |     "zone.js": "~0.11.4" | ||||||
|  |   }, | ||||||
|  |   "devDependencies": { | ||||||
|  |     "@angular-devkit/build-angular": "^14.0.0", | ||||||
|  |     "@angular-eslint/builder": "~13.0.1", | ||||||
|  |     "@angular-eslint/eslint-plugin": "~13.0.1", | ||||||
|  |     "@angular-eslint/eslint-plugin-template": "~13.0.1", | ||||||
|  |     "@angular-eslint/template-parser": "~13.0.1", | ||||||
|  |     "@angular/cli": "^14.0.0", | ||||||
|  |     "@angular/compiler": "^14.0.0", | ||||||
|  |     "@angular/compiler-cli": "^14.0.0", | ||||||
|  |     "@angular/language-service": "^14.0.0", | ||||||
|  |     "@capacitor/cli": "3.6.0", | ||||||
|  |     "@ionic/angular-toolkit": "^6.0.0", | ||||||
|  |     "@types/jasmine": "~3.6.0", | ||||||
|  |     "@types/jasminewd2": "~2.0.3", | ||||||
|  |     "@types/node": "^12.11.1", | ||||||
|  |     "@typescript-eslint/eslint-plugin": "5.3.0", | ||||||
|  |     "@typescript-eslint/parser": "5.3.0", | ||||||
|  |     "eslint": "^7.6.0", | ||||||
|  |     "eslint-plugin-import": "2.22.1", | ||||||
|  |     "eslint-plugin-jsdoc": "30.7.6", | ||||||
|  |     "eslint-plugin-prefer-arrow": "1.2.2", | ||||||
|  |     "jasmine-core": "~3.8.0", | ||||||
|  |     "jasmine-spec-reporter": "~5.0.0", | ||||||
|  |     "karma": "~6.3.2", | ||||||
|  |     "karma-chrome-launcher": "~3.1.0", | ||||||
|  |     "karma-coverage": "~2.0.3", | ||||||
|  |     "karma-coverage-istanbul-reporter": "~3.0.2", | ||||||
|  |     "karma-jasmine": "~4.0.0", | ||||||
|  |     "karma-jasmine-html-reporter": "^1.5.0", | ||||||
|  |     "protractor": "~7.0.0", | ||||||
|  |     "ts-node": "~8.3.0", | ||||||
|  |     "typescript": "~4.7.3" | ||||||
|  |   }, | ||||||
|  |   "description": "An Ionic project" | ||||||
|  | } | ||||||
							
								
								
									
										29
									
								
								ui/src/app/app-routing.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								ui/src/app/app-routing.module.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | |||||||
|  | import { NgModule } from '@angular/core'; | ||||||
|  | import { PreloadAllModules, RouterModule, Routes } from '@angular/router'; | ||||||
|  | 
 | ||||||
|  | const routes: Routes = [ | ||||||
|  |   { | ||||||
|  |     path: 'loader', | ||||||
|  |     loadChildren: () => import('./pages/loader/loader.module').then( m => m.LoaderPageModule) | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     path: 'login', | ||||||
|  |     loadChildren: () => import('./pages/login/login.module').then( m => m.LoginPageModule) | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     path: 'download', | ||||||
|  |     loadChildren: () => import('./pages/download/download.module').then( m => m.DownloadPageModule) | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     path: 'all-songs', | ||||||
|  |     loadChildren: () => import('./pages/all-songs/all-songs.module').then( m => m.AllSongsPageModule) | ||||||
|  |   } | ||||||
|  | ]; | ||||||
|  | 
 | ||||||
|  | @NgModule({ | ||||||
|  |   imports: [ | ||||||
|  |     RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules }) | ||||||
|  |   ], | ||||||
|  |   exports: [RouterModule] | ||||||
|  | }) | ||||||
|  | export class AppRoutingModule {} | ||||||
							
								
								
									
										21
									
								
								ui/src/app/app.component.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								ui/src/app/app.component.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | |||||||
|  | <ion-app> | ||||||
|  |   <ion-split-pane contentId="main-content"> | ||||||
|  |     <ion-menu contentId="main-content" type="overlay"> | ||||||
|  |       <ion-content> | ||||||
|  |         <ion-list id="inbox-list"> | ||||||
|  |           <ion-list-header>GoDown | ||||||
|  |             <ion-icon name="code-download-outline"></ion-icon> | ||||||
|  |           </ion-list-header> | ||||||
|  |           <ion-note>janic@voser.cloud</ion-note> | ||||||
|  |           <ion-menu-toggle auto-hide="false" *ngFor="let p of appPages; let i = index"> | ||||||
|  |             <ion-item routerDirection="root" [routerLink]="[p.url]" lines="none" detail="false" routerLinkActive="selected"> | ||||||
|  |               <ion-icon slot="start" [ios]="p.icon + '-outline'" [md]="p.icon + '-sharp'"></ion-icon> | ||||||
|  |               <ion-label>{{ p.title }}</ion-label> | ||||||
|  |             </ion-item> | ||||||
|  |           </ion-menu-toggle> | ||||||
|  |         </ion-list> | ||||||
|  |       </ion-content> | ||||||
|  |     </ion-menu> | ||||||
|  |     <ion-router-outlet id="main-content"></ion-router-outlet> | ||||||
|  |   </ion-split-pane> | ||||||
|  | </ion-app> | ||||||
							
								
								
									
										119
									
								
								ui/src/app/app.component.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								ui/src/app/app.component.scss
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,119 @@ | |||||||
|  | ion-menu ion-content { | ||||||
|  |   --background: var(--ion-item-background, var(--ion-background-color, #fff)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-menu.md ion-content { | ||||||
|  |   --padding-start: 8px; | ||||||
|  |   --padding-end: 8px; | ||||||
|  |   --padding-top: 20px; | ||||||
|  |   --padding-bottom: 20px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-menu.md ion-list { | ||||||
|  |   padding: 20px 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-menu.md ion-note { | ||||||
|  |   margin-bottom: 30px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-menu.md ion-list-header, | ||||||
|  | ion-menu.md ion-note { | ||||||
|  |   padding-left: 10px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-menu.md ion-list#inbox-list { | ||||||
|  |   border-bottom: 1px solid var(--ion-color-step-150, #d7d8da); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-menu.md ion-list#inbox-list ion-list-header { | ||||||
|  |   font-size: 22px; | ||||||
|  |   font-weight: 600; | ||||||
|  | 
 | ||||||
|  |   min-height: 20px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-menu.md ion-list#labels-list ion-list-header { | ||||||
|  |   font-size: 16px; | ||||||
|  | 
 | ||||||
|  |   margin-bottom: 18px; | ||||||
|  | 
 | ||||||
|  |   color: #757575; | ||||||
|  | 
 | ||||||
|  |   min-height: 26px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-menu.md ion-item { | ||||||
|  |   --padding-start: 10px; | ||||||
|  |   --padding-end: 10px; | ||||||
|  |   border-radius: 4px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-menu.md ion-item.selected { | ||||||
|  |   --background: rgba(var(--ion-color-primary-rgb), 0.14); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-menu.md ion-item.selected ion-icon { | ||||||
|  |   color: var(--ion-color-primary); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-menu.md ion-item ion-icon { | ||||||
|  |   color: #616e7e; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-menu.md ion-item ion-label { | ||||||
|  |   font-weight: 500; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-menu.ios ion-content { | ||||||
|  |   --padding-bottom: 20px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-menu.ios ion-list { | ||||||
|  |   padding: 20px 0 0 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-menu.ios ion-note { | ||||||
|  |   line-height: 24px; | ||||||
|  |   margin-bottom: 20px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-menu.ios ion-item { | ||||||
|  |   --padding-start: 16px; | ||||||
|  |   --padding-end: 16px; | ||||||
|  |   --min-height: 50px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-menu.ios ion-item.selected ion-icon { | ||||||
|  |   color: var(--ion-color-primary); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-menu.ios ion-item ion-icon { | ||||||
|  |   font-size: 24px; | ||||||
|  |   color: #73849a; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-menu.ios ion-list#labels-list ion-list-header { | ||||||
|  |   margin-bottom: 8px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-menu.ios ion-list-header, | ||||||
|  | ion-menu.ios ion-note { | ||||||
|  |   padding-left: 16px; | ||||||
|  |   padding-right: 16px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-menu.ios ion-note { | ||||||
|  |   margin-bottom: 8px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-note { | ||||||
|  |   display: inline-block; | ||||||
|  |   font-size: 16px; | ||||||
|  | 
 | ||||||
|  |   color: var(--ion-color-medium-shade); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-item.selected { | ||||||
|  |   --color: var(--ion-color-primary); | ||||||
|  | } | ||||||
							
								
								
									
										46
									
								
								ui/src/app/app.component.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								ui/src/app/app.component.spec.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,46 @@ | |||||||
|  | import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; | ||||||
|  | import { TestBed, waitForAsync } from '@angular/core/testing'; | ||||||
|  | 
 | ||||||
|  | import { RouterTestingModule } from '@angular/router/testing'; | ||||||
|  | 
 | ||||||
|  | import { AppComponent } from './app.component'; | ||||||
|  | 
 | ||||||
|  | describe('AppComponent', () => { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   beforeEach(waitForAsync(() => { | ||||||
|  | 
 | ||||||
|  |     TestBed.configureTestingModule({ | ||||||
|  |       declarations: [AppComponent], | ||||||
|  |       schemas: [CUSTOM_ELEMENTS_SCHEMA], | ||||||
|  |       imports: [ RouterTestingModule.withRoutes([])], | ||||||
|  |     }).compileComponents(); | ||||||
|  |   })); | ||||||
|  | 
 | ||||||
|  |   it('should create the app', waitForAsync(() => { | ||||||
|  |     const fixture = TestBed.createComponent(AppComponent); | ||||||
|  |     const app = fixture.debugElement.componentInstance; | ||||||
|  |     expect(app).toBeTruthy(); | ||||||
|  |   })); | ||||||
|  | 
 | ||||||
|  |   it('should have menu labels', waitForAsync(() => { | ||||||
|  |     const fixture = TestBed.createComponent(AppComponent); | ||||||
|  |     fixture.detectChanges(); | ||||||
|  |     const app = fixture.nativeElement; | ||||||
|  |     const menuItems = app.querySelectorAll('ion-label'); | ||||||
|  |     expect(menuItems.length).toEqual(12); | ||||||
|  |     expect(menuItems[0].textContent).toContain('Inbox'); | ||||||
|  |     expect(menuItems[1].textContent).toContain('Outbox'); | ||||||
|  |   })); | ||||||
|  | 
 | ||||||
|  |   it('should have urls', waitForAsync(() => { | ||||||
|  |     const fixture = TestBed.createComponent(AppComponent); | ||||||
|  |     fixture.detectChanges(); | ||||||
|  |     const app = fixture.nativeElement; | ||||||
|  |     const menuItems = app.querySelectorAll('ion-item'); | ||||||
|  |     expect(menuItems.length).toEqual(12); | ||||||
|  |     expect(menuItems[0].getAttribute('ng-reflect-router-link')).toEqual('/folder/Inbox'); | ||||||
|  |     expect(menuItems[1].getAttribute('ng-reflect-router-link')).toEqual('/folder/Outbox'); | ||||||
|  |   })); | ||||||
|  | 
 | ||||||
|  | }); | ||||||
							
								
								
									
										11
									
								
								ui/src/app/app.component.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								ui/src/app/app.component.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | |||||||
|  | import { Component } from '@angular/core'; | ||||||
|  | @Component({ | ||||||
|  |   selector: 'app-root', | ||||||
|  |   templateUrl: 'app.component.html', | ||||||
|  |   styleUrls: ['app.component.scss'], | ||||||
|  | }) | ||||||
|  | export class AppComponent { | ||||||
|  |   public appPages = [ | ||||||
|  |   ]; | ||||||
|  |   constructor() {} | ||||||
|  | } | ||||||
							
								
								
									
										16
									
								
								ui/src/app/app.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								ui/src/app/app.module.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | |||||||
|  | import { NgModule } from '@angular/core'; | ||||||
|  | import { BrowserModule } from '@angular/platform-browser'; | ||||||
|  | import { RouteReuseStrategy } from '@angular/router'; | ||||||
|  | 
 | ||||||
|  | import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; | ||||||
|  | 
 | ||||||
|  | import { AppComponent } from './app.component'; | ||||||
|  | import { AppRoutingModule } from './app-routing.module'; | ||||||
|  | 
 | ||||||
|  | @NgModule({ | ||||||
|  |   declarations: [AppComponent], | ||||||
|  |   imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule], | ||||||
|  |   providers: [{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }], | ||||||
|  |   bootstrap: [AppComponent], | ||||||
|  | }) | ||||||
|  | export class AppModule {} | ||||||
							
								
								
									
										17
									
								
								ui/src/app/pages/all-songs/all-songs-routing.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								ui/src/app/pages/all-songs/all-songs-routing.module.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | import { NgModule } from '@angular/core'; | ||||||
|  | import { Routes, RouterModule } from '@angular/router'; | ||||||
|  | 
 | ||||||
|  | import { AllSongsPage } from './all-songs.page'; | ||||||
|  | 
 | ||||||
|  | const routes: Routes = [ | ||||||
|  |   { | ||||||
|  |     path: '', | ||||||
|  |     component: AllSongsPage | ||||||
|  |   } | ||||||
|  | ]; | ||||||
|  | 
 | ||||||
|  | @NgModule({ | ||||||
|  |   imports: [RouterModule.forChild(routes)], | ||||||
|  |   exports: [RouterModule], | ||||||
|  | }) | ||||||
|  | export class AllSongsPageRoutingModule {} | ||||||
							
								
								
									
										20
									
								
								ui/src/app/pages/all-songs/all-songs.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								ui/src/app/pages/all-songs/all-songs.module.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | import { NgModule } from '@angular/core'; | ||||||
|  | import { CommonModule } from '@angular/common'; | ||||||
|  | import { FormsModule } from '@angular/forms'; | ||||||
|  | 
 | ||||||
|  | import { IonicModule } from '@ionic/angular'; | ||||||
|  | 
 | ||||||
|  | import { AllSongsPageRoutingModule } from './all-songs-routing.module'; | ||||||
|  | 
 | ||||||
|  | import { AllSongsPage } from './all-songs.page'; | ||||||
|  | 
 | ||||||
|  | @NgModule({ | ||||||
|  |   imports: [ | ||||||
|  |     CommonModule, | ||||||
|  |     FormsModule, | ||||||
|  |     IonicModule, | ||||||
|  |     AllSongsPageRoutingModule | ||||||
|  |   ], | ||||||
|  |   declarations: [AllSongsPage] | ||||||
|  | }) | ||||||
|  | export class AllSongsPageModule {} | ||||||
							
								
								
									
										9
									
								
								ui/src/app/pages/all-songs/all-songs.page.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								ui/src/app/pages/all-songs/all-songs.page.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | |||||||
|  | <ion-header> | ||||||
|  |   <ion-toolbar> | ||||||
|  |     <ion-title>all_songs</ion-title> | ||||||
|  |   </ion-toolbar> | ||||||
|  | </ion-header> | ||||||
|  | 
 | ||||||
|  | <ion-content> | ||||||
|  | 
 | ||||||
|  | </ion-content> | ||||||
							
								
								
									
										0
									
								
								ui/src/app/pages/all-songs/all-songs.page.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								ui/src/app/pages/all-songs/all-songs.page.scss
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										24
									
								
								ui/src/app/pages/all-songs/all-songs.page.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								ui/src/app/pages/all-songs/all-songs.page.spec.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | |||||||
|  | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; | ||||||
|  | import { IonicModule } from '@ionic/angular'; | ||||||
|  | 
 | ||||||
|  | import { AllSongsPage } from './all-songs.page'; | ||||||
|  | 
 | ||||||
|  | describe('AllSongsPage', () => { | ||||||
|  |   let component: AllSongsPage; | ||||||
|  |   let fixture: ComponentFixture<AllSongsPage>; | ||||||
|  | 
 | ||||||
|  |   beforeEach(waitForAsync(() => { | ||||||
|  |     TestBed.configureTestingModule({ | ||||||
|  |       declarations: [ AllSongsPage ], | ||||||
|  |       imports: [IonicModule.forRoot()] | ||||||
|  |     }).compileComponents(); | ||||||
|  | 
 | ||||||
|  |     fixture = TestBed.createComponent(AllSongsPage); | ||||||
|  |     component = fixture.componentInstance; | ||||||
|  |     fixture.detectChanges(); | ||||||
|  |   })); | ||||||
|  | 
 | ||||||
|  |   it('should create', () => { | ||||||
|  |     expect(component).toBeTruthy(); | ||||||
|  |   }); | ||||||
|  | }); | ||||||
							
								
								
									
										15
									
								
								ui/src/app/pages/all-songs/all-songs.page.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								ui/src/app/pages/all-songs/all-songs.page.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | |||||||
|  | import { Component, OnInit } from '@angular/core'; | ||||||
|  | 
 | ||||||
|  | @Component({ | ||||||
|  |   selector: 'app-all-songs', | ||||||
|  |   templateUrl: './all-songs.page.html', | ||||||
|  |   styleUrls: ['./all-songs.page.scss'], | ||||||
|  | }) | ||||||
|  | export class AllSongsPage implements OnInit { | ||||||
|  | 
 | ||||||
|  |   constructor() { } | ||||||
|  | 
 | ||||||
|  |   ngOnInit() { | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										17
									
								
								ui/src/app/pages/download/download-routing.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								ui/src/app/pages/download/download-routing.module.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | import { NgModule } from '@angular/core'; | ||||||
|  | import { Routes, RouterModule } from '@angular/router'; | ||||||
|  | 
 | ||||||
|  | import { DownloadPage } from './download.page'; | ||||||
|  | 
 | ||||||
|  | const routes: Routes = [ | ||||||
|  |   { | ||||||
|  |     path: '', | ||||||
|  |     component: DownloadPage | ||||||
|  |   } | ||||||
|  | ]; | ||||||
|  | 
 | ||||||
|  | @NgModule({ | ||||||
|  |   imports: [RouterModule.forChild(routes)], | ||||||
|  |   exports: [RouterModule], | ||||||
|  | }) | ||||||
|  | export class DownloadPageRoutingModule {} | ||||||
							
								
								
									
										20
									
								
								ui/src/app/pages/download/download.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								ui/src/app/pages/download/download.module.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | import { NgModule } from '@angular/core'; | ||||||
|  | import { CommonModule } from '@angular/common'; | ||||||
|  | import { FormsModule } from '@angular/forms'; | ||||||
|  | 
 | ||||||
|  | import { IonicModule } from '@ionic/angular'; | ||||||
|  | 
 | ||||||
|  | import { DownloadPageRoutingModule } from './download-routing.module'; | ||||||
|  | 
 | ||||||
|  | import { DownloadPage } from './download.page'; | ||||||
|  | 
 | ||||||
|  | @NgModule({ | ||||||
|  |   imports: [ | ||||||
|  |     CommonModule, | ||||||
|  |     FormsModule, | ||||||
|  |     IonicModule, | ||||||
|  |     DownloadPageRoutingModule | ||||||
|  |   ], | ||||||
|  |   declarations: [DownloadPage] | ||||||
|  | }) | ||||||
|  | export class DownloadPageModule {} | ||||||
							
								
								
									
										17
									
								
								ui/src/app/pages/download/download.page.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								ui/src/app/pages/download/download.page.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | <ion-header> | ||||||
|  |   <ion-toolbar> | ||||||
|  |     <ion-title>Download</ion-title> | ||||||
|  |   </ion-toolbar> | ||||||
|  | </ion-header> | ||||||
|  | 
 | ||||||
|  | <ion-content> | ||||||
|  | <!-- Input with placeholder --> | ||||||
|  | <section> | ||||||
|  |   <ion-input expand="full" pattern="url" placeholder="Enter URL Here"></ion-input> | ||||||
|  |   <div class="bottom-buttons"> | ||||||
|  |     <ion-button expand="full" color="secondary">Download to my Device</ion-button> | ||||||
|  |     <ion-button expand="full" color="primary">Upload to Music Store</ion-button> | ||||||
|  |   </div> | ||||||
|  |   </section> | ||||||
|  | </ion-content> | ||||||
|  | 
 | ||||||
							
								
								
									
										36
									
								
								ui/src/app/pages/download/download.page.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								ui/src/app/pages/download/download.page.scss
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | |||||||
|  | .flex-center { | ||||||
|  |     display: flex; | ||||||
|  |     justify-content: center; | ||||||
|  |     align-items: center; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | section { | ||||||
|  |     height: 100%; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-button { | ||||||
|  |     min-width: max-content; | ||||||
|  |     flex-grow: 1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-input { | ||||||
|  |     border: solid 0.2em rgba(var(--ion-color-secondary-rgb)); | ||||||
|  |     border-radius: 1em; | ||||||
|  |     margin: 1em; | ||||||
|  |     width: auto; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ion-input:hover { | ||||||
|  |     border-color: rgba(var(--ion-color-primary-rgb)); | ||||||
|  |     transition-duration: 1s; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | .bottom-buttons { | ||||||
|  |     width: 100%; | ||||||
|  |     bottom: 0; | ||||||
|  |     position: absolute; | ||||||
|  |     display: flex; | ||||||
|  |     flex-wrap: wrap; | ||||||
|  |     padding: 1em; | ||||||
|  | } | ||||||
							
								
								
									
										24
									
								
								ui/src/app/pages/download/download.page.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								ui/src/app/pages/download/download.page.spec.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | |||||||
|  | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; | ||||||
|  | import { IonicModule } from '@ionic/angular'; | ||||||
|  | 
 | ||||||
|  | import { DownloadPage } from './download.page'; | ||||||
|  | 
 | ||||||
|  | describe('DownloadPage', () => { | ||||||
|  |   let component: DownloadPage; | ||||||
|  |   let fixture: ComponentFixture<DownloadPage>; | ||||||
|  | 
 | ||||||
|  |   beforeEach(waitForAsync(() => { | ||||||
|  |     TestBed.configureTestingModule({ | ||||||
|  |       declarations: [ DownloadPage ], | ||||||
|  |       imports: [IonicModule.forRoot()] | ||||||
|  |     }).compileComponents(); | ||||||
|  | 
 | ||||||
|  |     fixture = TestBed.createComponent(DownloadPage); | ||||||
|  |     component = fixture.componentInstance; | ||||||
|  |     fixture.detectChanges(); | ||||||
|  |   })); | ||||||
|  | 
 | ||||||
|  |   it('should create', () => { | ||||||
|  |     expect(component).toBeTruthy(); | ||||||
|  |   }); | ||||||
|  | }); | ||||||
							
								
								
									
										15
									
								
								ui/src/app/pages/download/download.page.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								ui/src/app/pages/download/download.page.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | |||||||
|  | import { Component, OnInit } from '@angular/core'; | ||||||
|  | 
 | ||||||
|  | @Component({ | ||||||
|  |   selector: 'app-download', | ||||||
|  |   templateUrl: './download.page.html', | ||||||
|  |   styleUrls: ['./download.page.scss'], | ||||||
|  | }) | ||||||
|  | export class DownloadPage implements OnInit { | ||||||
|  | 
 | ||||||
|  |   constructor() { } | ||||||
|  | 
 | ||||||
|  |   ngOnInit() { | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										17
									
								
								ui/src/app/pages/loader/loader-routing.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								ui/src/app/pages/loader/loader-routing.module.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | import { NgModule } from '@angular/core'; | ||||||
|  | import { Routes, RouterModule } from '@angular/router'; | ||||||
|  | 
 | ||||||
|  | import { LoaderPage } from './loader.page'; | ||||||
|  | 
 | ||||||
|  | const routes: Routes = [ | ||||||
|  |   { | ||||||
|  |     path: '', | ||||||
|  |     component: LoaderPage | ||||||
|  |   } | ||||||
|  | ]; | ||||||
|  | 
 | ||||||
|  | @NgModule({ | ||||||
|  |   imports: [RouterModule.forChild(routes)], | ||||||
|  |   exports: [RouterModule], | ||||||
|  | }) | ||||||
|  | export class LoaderPageRoutingModule {} | ||||||
							
								
								
									
										20
									
								
								ui/src/app/pages/loader/loader.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								ui/src/app/pages/loader/loader.module.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | import { NgModule } from '@angular/core'; | ||||||
|  | import { CommonModule } from '@angular/common'; | ||||||
|  | import { FormsModule } from '@angular/forms'; | ||||||
|  | 
 | ||||||
|  | import { IonicModule } from '@ionic/angular'; | ||||||
|  | 
 | ||||||
|  | import { LoaderPageRoutingModule } from './loader-routing.module'; | ||||||
|  | 
 | ||||||
|  | import { LoaderPage } from './loader.page'; | ||||||
|  | 
 | ||||||
|  | @NgModule({ | ||||||
|  |   imports: [ | ||||||
|  |     CommonModule, | ||||||
|  |     FormsModule, | ||||||
|  |     IonicModule, | ||||||
|  |     LoaderPageRoutingModule | ||||||
|  |   ], | ||||||
|  |   declarations: [LoaderPage] | ||||||
|  | }) | ||||||
|  | export class LoaderPageModule {} | ||||||
							
								
								
									
										11
									
								
								ui/src/app/pages/loader/loader.page.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								ui/src/app/pages/loader/loader.page.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | |||||||
|  | <ion-header> | ||||||
|  |   <ion-toolbar> | ||||||
|  |     <ion-title>loader</ion-title> | ||||||
|  |   </ion-toolbar> | ||||||
|  | </ion-header> | ||||||
|  | 
 | ||||||
|  | <ion-content> | ||||||
|  |   <div class="flex-center"> | ||||||
|  |     <ion-spinner name="crescent" color="primary"></ion-spinner> | ||||||
|  |   </div> | ||||||
|  | </ion-content> | ||||||
							
								
								
									
										10
									
								
								ui/src/app/pages/loader/loader.page.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								ui/src/app/pages/loader/loader.page.scss
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | |||||||
|  | .flex-center { | ||||||
|  |     display: flex; | ||||||
|  |     justify-content: center; | ||||||
|  |     align-items: center; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | div { | ||||||
|  |     width: 100%; | ||||||
|  |     height: 100%; | ||||||
|  | } | ||||||
							
								
								
									
										24
									
								
								ui/src/app/pages/loader/loader.page.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								ui/src/app/pages/loader/loader.page.spec.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | |||||||
|  | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; | ||||||
|  | import { IonicModule } from '@ionic/angular'; | ||||||
|  | 
 | ||||||
|  | import { LoaderPage } from './loader.page'; | ||||||
|  | 
 | ||||||
|  | describe('LoaderPage', () => { | ||||||
|  |   let component: LoaderPage; | ||||||
|  |   let fixture: ComponentFixture<LoaderPage>; | ||||||
|  | 
 | ||||||
|  |   beforeEach(waitForAsync(() => { | ||||||
|  |     TestBed.configureTestingModule({ | ||||||
|  |       declarations: [ LoaderPage ], | ||||||
|  |       imports: [IonicModule.forRoot()] | ||||||
|  |     }).compileComponents(); | ||||||
|  | 
 | ||||||
|  |     fixture = TestBed.createComponent(LoaderPage); | ||||||
|  |     component = fixture.componentInstance; | ||||||
|  |     fixture.detectChanges(); | ||||||
|  |   })); | ||||||
|  | 
 | ||||||
|  |   it('should create', () => { | ||||||
|  |     expect(component).toBeTruthy(); | ||||||
|  |   }); | ||||||
|  | }); | ||||||
							
								
								
									
										15
									
								
								ui/src/app/pages/loader/loader.page.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								ui/src/app/pages/loader/loader.page.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | |||||||
|  | import { Component, OnInit } from '@angular/core'; | ||||||
|  | 
 | ||||||
|  | @Component({ | ||||||
|  |   selector: 'app-loader', | ||||||
|  |   templateUrl: './loader.page.html', | ||||||
|  |   styleUrls: ['./loader.page.scss'], | ||||||
|  | }) | ||||||
|  | export class LoaderPage implements OnInit { | ||||||
|  | 
 | ||||||
|  |   constructor() { } | ||||||
|  | 
 | ||||||
|  |   ngOnInit() { | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										17
									
								
								ui/src/app/pages/login/login-routing.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								ui/src/app/pages/login/login-routing.module.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | import { NgModule } from '@angular/core'; | ||||||
|  | import { Routes, RouterModule } from '@angular/router'; | ||||||
|  | 
 | ||||||
|  | import { LoginPage } from './login.page'; | ||||||
|  | 
 | ||||||
|  | const routes: Routes = [ | ||||||
|  |   { | ||||||
|  |     path: '', | ||||||
|  |     component: LoginPage | ||||||
|  |   } | ||||||
|  | ]; | ||||||
|  | 
 | ||||||
|  | @NgModule({ | ||||||
|  |   imports: [RouterModule.forChild(routes)], | ||||||
|  |   exports: [RouterModule], | ||||||
|  | }) | ||||||
|  | export class LoginPageRoutingModule {} | ||||||
							
								
								
									
										20
									
								
								ui/src/app/pages/login/login.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								ui/src/app/pages/login/login.module.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | import { NgModule } from '@angular/core'; | ||||||
|  | import { CommonModule } from '@angular/common'; | ||||||
|  | import { FormsModule } from '@angular/forms'; | ||||||
|  | 
 | ||||||
|  | import { IonicModule } from '@ionic/angular'; | ||||||
|  | 
 | ||||||
|  | import { LoginPageRoutingModule } from './login-routing.module'; | ||||||
|  | 
 | ||||||
|  | import { LoginPage } from './login.page'; | ||||||
|  | 
 | ||||||
|  | @NgModule({ | ||||||
|  |   imports: [ | ||||||
|  |     CommonModule, | ||||||
|  |     FormsModule, | ||||||
|  |     IonicModule, | ||||||
|  |     LoginPageRoutingModule | ||||||
|  |   ], | ||||||
|  |   declarations: [LoginPage] | ||||||
|  | }) | ||||||
|  | export class LoginPageModule {} | ||||||
							
								
								
									
										9
									
								
								ui/src/app/pages/login/login.page.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								ui/src/app/pages/login/login.page.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | |||||||
|  | <ion-header> | ||||||
|  |   <ion-toolbar> | ||||||
|  |     <ion-title>login</ion-title> | ||||||
|  |   </ion-toolbar> | ||||||
|  | </ion-header> | ||||||
|  | 
 | ||||||
|  | <ion-content> | ||||||
|  | 
 | ||||||
|  | </ion-content> | ||||||
							
								
								
									
										0
									
								
								ui/src/app/pages/login/login.page.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								ui/src/app/pages/login/login.page.scss
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										24
									
								
								ui/src/app/pages/login/login.page.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								ui/src/app/pages/login/login.page.spec.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | |||||||
|  | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; | ||||||
|  | import { IonicModule } from '@ionic/angular'; | ||||||
|  | 
 | ||||||
|  | import { LoginPage } from './login.page'; | ||||||
|  | 
 | ||||||
|  | describe('LoginPage', () => { | ||||||
|  |   let component: LoginPage; | ||||||
|  |   let fixture: ComponentFixture<LoginPage>; | ||||||
|  | 
 | ||||||
|  |   beforeEach(waitForAsync(() => { | ||||||
|  |     TestBed.configureTestingModule({ | ||||||
|  |       declarations: [ LoginPage ], | ||||||
|  |       imports: [IonicModule.forRoot()] | ||||||
|  |     }).compileComponents(); | ||||||
|  | 
 | ||||||
|  |     fixture = TestBed.createComponent(LoginPage); | ||||||
|  |     component = fixture.componentInstance; | ||||||
|  |     fixture.detectChanges(); | ||||||
|  |   })); | ||||||
|  | 
 | ||||||
|  |   it('should create', () => { | ||||||
|  |     expect(component).toBeTruthy(); | ||||||
|  |   }); | ||||||
|  | }); | ||||||
							
								
								
									
										15
									
								
								ui/src/app/pages/login/login.page.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								ui/src/app/pages/login/login.page.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | |||||||
|  | import { Component, OnInit } from '@angular/core'; | ||||||
|  | 
 | ||||||
|  | @Component({ | ||||||
|  |   selector: 'app-login', | ||||||
|  |   templateUrl: './login.page.html', | ||||||
|  |   styleUrls: ['./login.page.scss'], | ||||||
|  | }) | ||||||
|  | export class LoginPage implements OnInit { | ||||||
|  | 
 | ||||||
|  |   constructor() { } | ||||||
|  | 
 | ||||||
|  |   ngOnInit() { | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										
											BIN
										
									
								
								ui/src/assets/icon/favicon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								ui/src/assets/icon/favicon.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 930 B | 
							
								
								
									
										1
									
								
								ui/src/assets/shapes.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								ui/src/assets/shapes.svg
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | <svg width="350" height="140" xmlns="http://www.w3.org/2000/svg" style="background:#f6f7f9"><g fill="none" fill-rule="evenodd"><path fill="#F04141" style="mix-blend-mode:multiply" d="M61.905-34.23l96.194 54.51-66.982 54.512L22 34.887z"/><circle fill="#10DC60" style="mix-blend-mode:multiply" cx="155.5" cy="135.5" r="57.5"/><path fill="#3880FF" style="mix-blend-mode:multiply" d="M208.538 9.513l84.417 15.392L223.93 93.93z"/><path fill="#FFCE00" style="mix-blend-mode:multiply" d="M268.625 106.557l46.332-26.75 46.332 26.75v53.5l-46.332 26.75-46.332-26.75z"/><circle fill="#7044FF" style="mix-blend-mode:multiply" cx="299.5" cy="9.5" r="38.5"/><rect fill="#11D3EA" style="mix-blend-mode:multiply" transform="rotate(-60 148.47 37.886)" x="143.372" y="-7.056" width="10.196" height="89.884" rx="5.098"/><path d="M-25.389 74.253l84.86 8.107c5.498.525 9.53 5.407 9.004 10.905a10 10 0 0 1-.057.477l-12.36 85.671a10.002 10.002 0 0 1-11.634 8.42l-86.351-15.226c-5.44-.959-9.07-6.145-8.112-11.584l13.851-78.551a10 10 0 0 1 10.799-8.219z" fill="#7044FF" style="mix-blend-mode:multiply"/><circle fill="#0CD1E8" style="mix-blend-mode:multiply" cx="273.5" cy="106.5" r="20.5"/></g></svg> | ||||||
| After Width: | Height: | Size: 1.1 KiB | 
							
								
								
									
										3
									
								
								ui/src/environments/environment.prod.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								ui/src/environments/environment.prod.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | |||||||
|  | export const environment = { | ||||||
|  |   production: true | ||||||
|  | }; | ||||||
							
								
								
									
										16
									
								
								ui/src/environments/environment.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								ui/src/environments/environment.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | |||||||
|  | // This file can be replaced during build by using the `fileReplacements` array.
 | ||||||
|  | // `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.
 | ||||||
|  | // The list of file replacements can be found in `angular.json`.
 | ||||||
|  | 
 | ||||||
|  | export const environment = { | ||||||
|  |   production: false | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /* | ||||||
|  |  * For easier debugging in development mode, you can import the following file | ||||||
|  |  * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. | ||||||
|  |  * | ||||||
|  |  * This import should be commented out in production mode because it will have a negative impact | ||||||
|  |  * on performance if an error is thrown. | ||||||
|  |  */ | ||||||
|  | // import 'zone.js/dist/zone-error';  // Included with Angular CLI.
 | ||||||
							
								
								
									
										26
									
								
								ui/src/global.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								ui/src/global.scss
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | |||||||
|  | /* | ||||||
|  |  * App Global CSS | ||||||
|  |  * ---------------------------------------------------------------------------- | ||||||
|  |  * Put style rules here that you want to apply globally. These styles are for | ||||||
|  |  * the entire app and not just one component. Additionally, this file can be | ||||||
|  |  * used as an entry point to import other CSS/Sass files to be included in the | ||||||
|  |  * output CSS. | ||||||
|  |  * For more information on global stylesheets, visit the documentation: | ||||||
|  |  * https://ionicframework.com/docs/layout/global-stylesheets | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /* Core CSS required for Ionic components to work properly */ | ||||||
|  | @import "~@ionic/angular/css/core.css"; | ||||||
|  | 
 | ||||||
|  | /* Basic CSS for apps built with Ionic */ | ||||||
|  | @import "~@ionic/angular/css/normalize.css"; | ||||||
|  | @import "~@ionic/angular/css/structure.css"; | ||||||
|  | @import "~@ionic/angular/css/typography.css"; | ||||||
|  | @import '~@ionic/angular/css/display.css'; | ||||||
|  | 
 | ||||||
|  | /* Optional CSS utils that can be commented out */ | ||||||
|  | @import "~@ionic/angular/css/padding.css"; | ||||||
|  | @import "~@ionic/angular/css/float-elements.css"; | ||||||
|  | @import "~@ionic/angular/css/text-alignment.css"; | ||||||
|  | @import "~@ionic/angular/css/text-transformation.css"; | ||||||
|  | @import "~@ionic/angular/css/flex-utils.css"; | ||||||
							
								
								
									
										26
									
								
								ui/src/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								ui/src/index.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | |||||||
|  | <!DOCTYPE html> | ||||||
|  | <html lang="en"> | ||||||
|  | 
 | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8" /> | ||||||
|  |   <title>Ionic App</title> | ||||||
|  | 
 | ||||||
|  |   <base href="/" /> | ||||||
|  | 
 | ||||||
|  |   <meta name="color-scheme" content="light dark" /> | ||||||
|  |   <meta name="viewport" content="viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" /> | ||||||
|  |   <meta name="format-detection" content="telephone=no" /> | ||||||
|  |   <meta name="msapplication-tap-highlight" content="no" /> | ||||||
|  | 
 | ||||||
|  |   <link rel="icon" type="image/png" href="assets/icon/favicon.png" /> | ||||||
|  | 
 | ||||||
|  |   <!-- add to homescreen for ios --> | ||||||
|  |   <meta name="apple-mobile-web-app-capable" content="yes" /> | ||||||
|  |   <meta name="apple-mobile-web-app-status-bar-style" content="black" /> | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body> | ||||||
|  |   <app-root></app-root> | ||||||
|  | </body> | ||||||
|  | 
 | ||||||
|  | </html> | ||||||
							
								
								
									
										12
									
								
								ui/src/main.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								ui/src/main.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | |||||||
|  | import { enableProdMode } from '@angular/core'; | ||||||
|  | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; | ||||||
|  | 
 | ||||||
|  | import { AppModule } from './app/app.module'; | ||||||
|  | import { environment } from './environments/environment'; | ||||||
|  | 
 | ||||||
|  | if (environment.production) { | ||||||
|  |   enableProdMode(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | platformBrowserDynamic().bootstrapModule(AppModule) | ||||||
|  |   .catch(err => console.log(err)); | ||||||
							
								
								
									
										65
									
								
								ui/src/polyfills.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								ui/src/polyfills.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,65 @@ | |||||||
|  | /** | ||||||
|  |  * This file includes polyfills needed by Angular and is loaded before the app. | ||||||
|  |  * You can add your own extra polyfills to this file. | ||||||
|  |  * | ||||||
|  |  * This file is divided into 2 sections: | ||||||
|  |  *   1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. | ||||||
|  |  *   2. Application imports. Files imported after ZoneJS that should be loaded before your main | ||||||
|  |  *      file. | ||||||
|  |  * | ||||||
|  |  * The current setup is for so-called "evergreen" browsers; the last versions of browsers that | ||||||
|  |  * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), | ||||||
|  |  * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. | ||||||
|  |  * | ||||||
|  |  * Learn more in https://angular.io/guide/browser-support
 | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /*************************************************************************************************** | ||||||
|  |  * BROWSER POLYFILLS | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /** IE11 requires the following for NgClass support on SVG elements */ | ||||||
|  | // import 'classlist.js';  // Run `npm install --save classlist.js`.
 | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Web Animations `@angular/platform-browser/animations` | ||||||
|  |  * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. | ||||||
|  |  * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). | ||||||
|  |  */ | ||||||
|  | // import 'web-animations-js';  // Run `npm install --save web-animations-js`.
 | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * By default, zone.js will patch all possible macroTask and DomEvents | ||||||
|  |  * user can disable parts of macroTask/DomEvents patch by setting following flags | ||||||
|  |  * because those flags need to be set before `zone.js` being loaded, and webpack | ||||||
|  |  * will put import in the top of bundle, so user need to create a separate file | ||||||
|  |  * in this directory (for example: zone-flags.ts), and put the following flags | ||||||
|  |  * into that file, and then add the following code before importing zone.js. | ||||||
|  |  * import './zone-flags'; | ||||||
|  |  * | ||||||
|  |  * The flags allowed in zone-flags.ts are listed here. | ||||||
|  |  * | ||||||
|  |  * The following flags will work for all browsers. | ||||||
|  |  * | ||||||
|  |  * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame
 | ||||||
|  |  * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick
 | ||||||
|  |  * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames
 | ||||||
|  |  * | ||||||
|  |  *  in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js | ||||||
|  |  *  with the following flag, it will bypass `zone.js` patch for IE/Edge | ||||||
|  |  * | ||||||
|  |  *  (window as any).__Zone_enable_cross_context_check = true; | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | import './zone-flags'; | ||||||
|  | 
 | ||||||
|  | /*************************************************************************************************** | ||||||
|  |  * Zone JS is required by default for Angular itself. | ||||||
|  |  */ | ||||||
|  | import 'zone.js/dist/zone';  // Included with Angular CLI.
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /*************************************************************************************************** | ||||||
|  |  * APPLICATION IMPORTS | ||||||
|  |  */ | ||||||
							
								
								
									
										25
									
								
								ui/src/test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								ui/src/test.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | |||||||
|  | // This file is required by karma.conf.js and loads recursively all the .spec and framework files
 | ||||||
|  | 
 | ||||||
|  | import 'zone.js/dist/zone-testing'; | ||||||
|  | import { getTestBed } from '@angular/core/testing'; | ||||||
|  | import { | ||||||
|  |   BrowserDynamicTestingModule, | ||||||
|  |   platformBrowserDynamicTesting | ||||||
|  | } from '@angular/platform-browser-dynamic/testing'; | ||||||
|  | 
 | ||||||
|  | declare const require: { | ||||||
|  |   context(path: string, deep?: boolean, filter?: RegExp): { | ||||||
|  |     <T>(id: string): T; | ||||||
|  |     keys(): string[]; | ||||||
|  |   }; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | // First, initialize the Angular testing environment.
 | ||||||
|  | getTestBed().initTestEnvironment( | ||||||
|  |   BrowserDynamicTestingModule, | ||||||
|  |   platformBrowserDynamicTesting() | ||||||
|  | ); | ||||||
|  | // Then we find all the tests.
 | ||||||
|  | const context = require.context('./', true, /\.spec\.ts$/); | ||||||
|  | // And load the modules.
 | ||||||
|  | context.keys().map(context); | ||||||
							
								
								
									
										236
									
								
								ui/src/theme/variables.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										236
									
								
								ui/src/theme/variables.scss
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,236 @@ | |||||||
|  | // Ionic Variables and Theming. For more info, please see: | ||||||
|  | // http://ionicframework.com/docs/theming/ | ||||||
|  | 
 | ||||||
|  | /** Ionic CSS Variables **/ | ||||||
|  | :root { | ||||||
|  |   /** primary **/ | ||||||
|  |   --ion-color-primary: #3880ff; | ||||||
|  |   --ion-color-primary-rgb: 56, 128, 255; | ||||||
|  |   --ion-color-primary-contrast: #ffffff; | ||||||
|  |   --ion-color-primary-contrast-rgb: 255, 255, 255; | ||||||
|  |   --ion-color-primary-shade: #3171e0; | ||||||
|  |   --ion-color-primary-tint: #4c8dff; | ||||||
|  | 
 | ||||||
|  |   /** secondary **/ | ||||||
|  |   --ion-color-secondary: #3dc2ff; | ||||||
|  |   --ion-color-secondary-rgb: 61, 194, 255; | ||||||
|  |   --ion-color-secondary-contrast: #ffffff; | ||||||
|  |   --ion-color-secondary-contrast-rgb: 255, 255, 255; | ||||||
|  |   --ion-color-secondary-shade: #36abe0; | ||||||
|  |   --ion-color-secondary-tint: #50c8ff; | ||||||
|  | 
 | ||||||
|  |   /** tertiary **/ | ||||||
|  |   --ion-color-tertiary: #5260ff; | ||||||
|  |   --ion-color-tertiary-rgb: 82, 96, 255; | ||||||
|  |   --ion-color-tertiary-contrast: #ffffff; | ||||||
|  |   --ion-color-tertiary-contrast-rgb: 255, 255, 255; | ||||||
|  |   --ion-color-tertiary-shade: #4854e0; | ||||||
|  |   --ion-color-tertiary-tint: #6370ff; | ||||||
|  | 
 | ||||||
|  |   /** success **/ | ||||||
|  |   --ion-color-success: #2dd36f; | ||||||
|  |   --ion-color-success-rgb: 45, 211, 111; | ||||||
|  |   --ion-color-success-contrast: #ffffff; | ||||||
|  |   --ion-color-success-contrast-rgb: 255, 255, 255; | ||||||
|  |   --ion-color-success-shade: #28ba62; | ||||||
|  |   --ion-color-success-tint: #42d77d; | ||||||
|  | 
 | ||||||
|  |   /** warning **/ | ||||||
|  |   --ion-color-warning: #ffc409; | ||||||
|  |   --ion-color-warning-rgb: 255, 196, 9; | ||||||
|  |   --ion-color-warning-contrast: #000000; | ||||||
|  |   --ion-color-warning-contrast-rgb: 0, 0, 0; | ||||||
|  |   --ion-color-warning-shade: #e0ac08; | ||||||
|  |   --ion-color-warning-tint: #ffca22; | ||||||
|  | 
 | ||||||
|  |   /** danger **/ | ||||||
|  |   --ion-color-danger: #eb445a; | ||||||
|  |   --ion-color-danger-rgb: 235, 68, 90; | ||||||
|  |   --ion-color-danger-contrast: #ffffff; | ||||||
|  |   --ion-color-danger-contrast-rgb: 255, 255, 255; | ||||||
|  |   --ion-color-danger-shade: #cf3c4f; | ||||||
|  |   --ion-color-danger-tint: #ed576b; | ||||||
|  | 
 | ||||||
|  |   /** dark **/ | ||||||
|  |   --ion-color-dark: #222428; | ||||||
|  |   --ion-color-dark-rgb: 34, 36, 40; | ||||||
|  |   --ion-color-dark-contrast: #ffffff; | ||||||
|  |   --ion-color-dark-contrast-rgb: 255, 255, 255; | ||||||
|  |   --ion-color-dark-shade: #1e2023; | ||||||
|  |   --ion-color-dark-tint: #383a3e; | ||||||
|  | 
 | ||||||
|  |   /** medium **/ | ||||||
|  |   --ion-color-medium: #92949c; | ||||||
|  |   --ion-color-medium-rgb: 146, 148, 156; | ||||||
|  |   --ion-color-medium-contrast: #ffffff; | ||||||
|  |   --ion-color-medium-contrast-rgb: 255, 255, 255; | ||||||
|  |   --ion-color-medium-shade: #808289; | ||||||
|  |   --ion-color-medium-tint: #9d9fa6; | ||||||
|  | 
 | ||||||
|  |   /** light **/ | ||||||
|  |   --ion-color-light: #f4f5f8; | ||||||
|  |   --ion-color-light-rgb: 244, 245, 248; | ||||||
|  |   --ion-color-light-contrast: #000000; | ||||||
|  |   --ion-color-light-contrast-rgb: 0, 0, 0; | ||||||
|  |   --ion-color-light-shade: #d7d8da; | ||||||
|  |   --ion-color-light-tint: #f5f6f9; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @media (prefers-color-scheme: dark) { | ||||||
|  |   /* | ||||||
|  |    * Dark Colors | ||||||
|  |    * ------------------------------------------- | ||||||
|  |    */ | ||||||
|  | 
 | ||||||
|  |   body { | ||||||
|  |     --ion-color-primary: #428cff; | ||||||
|  |     --ion-color-primary-rgb: 66,140,255; | ||||||
|  |     --ion-color-primary-contrast: #ffffff; | ||||||
|  |     --ion-color-primary-contrast-rgb: 255,255,255; | ||||||
|  |     --ion-color-primary-shade: #3a7be0; | ||||||
|  |     --ion-color-primary-tint: #5598ff; | ||||||
|  | 
 | ||||||
|  |     --ion-color-secondary: #50c8ff; | ||||||
|  |     --ion-color-secondary-rgb: 80,200,255; | ||||||
|  |     --ion-color-secondary-contrast: #ffffff; | ||||||
|  |     --ion-color-secondary-contrast-rgb: 255,255,255; | ||||||
|  |     --ion-color-secondary-shade: #46b0e0; | ||||||
|  |     --ion-color-secondary-tint: #62ceff; | ||||||
|  | 
 | ||||||
|  |     --ion-color-tertiary: #6a64ff; | ||||||
|  |     --ion-color-tertiary-rgb: 106,100,255; | ||||||
|  |     --ion-color-tertiary-contrast: #ffffff; | ||||||
|  |     --ion-color-tertiary-contrast-rgb: 255,255,255; | ||||||
|  |     --ion-color-tertiary-shade: #5d58e0; | ||||||
|  |     --ion-color-tertiary-tint: #7974ff; | ||||||
|  | 
 | ||||||
|  |     --ion-color-success: #2fdf75; | ||||||
|  |     --ion-color-success-rgb: 47,223,117; | ||||||
|  |     --ion-color-success-contrast: #000000; | ||||||
|  |     --ion-color-success-contrast-rgb: 0,0,0; | ||||||
|  |     --ion-color-success-shade: #29c467; | ||||||
|  |     --ion-color-success-tint: #44e283; | ||||||
|  | 
 | ||||||
|  |     --ion-color-warning: #ffd534; | ||||||
|  |     --ion-color-warning-rgb: 255,213,52; | ||||||
|  |     --ion-color-warning-contrast: #000000; | ||||||
|  |     --ion-color-warning-contrast-rgb: 0,0,0; | ||||||
|  |     --ion-color-warning-shade: #e0bb2e; | ||||||
|  |     --ion-color-warning-tint: #ffd948; | ||||||
|  | 
 | ||||||
|  |     --ion-color-danger: #ff4961; | ||||||
|  |     --ion-color-danger-rgb: 255,73,97; | ||||||
|  |     --ion-color-danger-contrast: #ffffff; | ||||||
|  |     --ion-color-danger-contrast-rgb: 255,255,255; | ||||||
|  |     --ion-color-danger-shade: #e04055; | ||||||
|  |     --ion-color-danger-tint: #ff5b71; | ||||||
|  | 
 | ||||||
|  |     --ion-color-dark: #f4f5f8; | ||||||
|  |     --ion-color-dark-rgb: 244,245,248; | ||||||
|  |     --ion-color-dark-contrast: #000000; | ||||||
|  |     --ion-color-dark-contrast-rgb: 0,0,0; | ||||||
|  |     --ion-color-dark-shade: #d7d8da; | ||||||
|  |     --ion-color-dark-tint: #f5f6f9; | ||||||
|  | 
 | ||||||
|  |     --ion-color-medium: #989aa2; | ||||||
|  |     --ion-color-medium-rgb: 152,154,162; | ||||||
|  |     --ion-color-medium-contrast: #000000; | ||||||
|  |     --ion-color-medium-contrast-rgb: 0,0,0; | ||||||
|  |     --ion-color-medium-shade: #86888f; | ||||||
|  |     --ion-color-medium-tint: #a2a4ab; | ||||||
|  | 
 | ||||||
|  |     --ion-color-light: #222428; | ||||||
|  |     --ion-color-light-rgb: 34,36,40; | ||||||
|  |     --ion-color-light-contrast: #ffffff; | ||||||
|  |     --ion-color-light-contrast-rgb: 255,255,255; | ||||||
|  |     --ion-color-light-shade: #1e2023; | ||||||
|  |     --ion-color-light-tint: #383a3e; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /* | ||||||
|  |    * iOS Dark Theme | ||||||
|  |    * ------------------------------------------- | ||||||
|  |    */ | ||||||
|  | 
 | ||||||
|  |   .ios body { | ||||||
|  |     --ion-background-color: #000000; | ||||||
|  |     --ion-background-color-rgb: 0,0,0; | ||||||
|  | 
 | ||||||
|  |     --ion-text-color: #ffffff; | ||||||
|  |     --ion-text-color-rgb: 255,255,255; | ||||||
|  | 
 | ||||||
|  |     --ion-color-step-50: #0d0d0d; | ||||||
|  |     --ion-color-step-100: #1a1a1a; | ||||||
|  |     --ion-color-step-150: #262626; | ||||||
|  |     --ion-color-step-200: #333333; | ||||||
|  |     --ion-color-step-250: #404040; | ||||||
|  |     --ion-color-step-300: #4d4d4d; | ||||||
|  |     --ion-color-step-350: #595959; | ||||||
|  |     --ion-color-step-400: #666666; | ||||||
|  |     --ion-color-step-450: #737373; | ||||||
|  |     --ion-color-step-500: #808080; | ||||||
|  |     --ion-color-step-550: #8c8c8c; | ||||||
|  |     --ion-color-step-600: #999999; | ||||||
|  |     --ion-color-step-650: #a6a6a6; | ||||||
|  |     --ion-color-step-700: #b3b3b3; | ||||||
|  |     --ion-color-step-750: #bfbfbf; | ||||||
|  |     --ion-color-step-800: #cccccc; | ||||||
|  |     --ion-color-step-850: #d9d9d9; | ||||||
|  |     --ion-color-step-900: #e6e6e6; | ||||||
|  |     --ion-color-step-950: #f2f2f2; | ||||||
|  | 
 | ||||||
|  |     --ion-item-background: #000000; | ||||||
|  | 
 | ||||||
|  |     --ion-card-background: #1c1c1d; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   .ios ion-modal { | ||||||
|  |     --ion-background-color: var(--ion-color-step-100); | ||||||
|  |     --ion-toolbar-background: var(--ion-color-step-150); | ||||||
|  |     --ion-toolbar-border-color: var(--ion-color-step-250); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   /* | ||||||
|  |    * Material Design Dark Theme | ||||||
|  |    * ------------------------------------------- | ||||||
|  |    */ | ||||||
|  | 
 | ||||||
|  |   .md body { | ||||||
|  |     --ion-background-color: #121212; | ||||||
|  |     --ion-background-color-rgb: 18,18,18; | ||||||
|  | 
 | ||||||
|  |     --ion-text-color: #ffffff; | ||||||
|  |     --ion-text-color-rgb: 255,255,255; | ||||||
|  | 
 | ||||||
|  |     --ion-border-color: #222222; | ||||||
|  | 
 | ||||||
|  |     --ion-color-step-50: #1e1e1e; | ||||||
|  |     --ion-color-step-100: #2a2a2a; | ||||||
|  |     --ion-color-step-150: #363636; | ||||||
|  |     --ion-color-step-200: #414141; | ||||||
|  |     --ion-color-step-250: #4d4d4d; | ||||||
|  |     --ion-color-step-300: #595959; | ||||||
|  |     --ion-color-step-350: #656565; | ||||||
|  |     --ion-color-step-400: #717171; | ||||||
|  |     --ion-color-step-450: #7d7d7d; | ||||||
|  |     --ion-color-step-500: #898989; | ||||||
|  |     --ion-color-step-550: #949494; | ||||||
|  |     --ion-color-step-600: #a0a0a0; | ||||||
|  |     --ion-color-step-650: #acacac; | ||||||
|  |     --ion-color-step-700: #b8b8b8; | ||||||
|  |     --ion-color-step-750: #c4c4c4; | ||||||
|  |     --ion-color-step-800: #d0d0d0; | ||||||
|  |     --ion-color-step-850: #dbdbdb; | ||||||
|  |     --ion-color-step-900: #e7e7e7; | ||||||
|  |     --ion-color-step-950: #f3f3f3; | ||||||
|  | 
 | ||||||
|  |     --ion-item-background: #1e1e1e; | ||||||
|  | 
 | ||||||
|  |     --ion-toolbar-background: #1f1f1f; | ||||||
|  | 
 | ||||||
|  |     --ion-tab-bar-background: #1f1f1f; | ||||||
|  | 
 | ||||||
|  |     --ion-card-background: #1e1e1e; | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										6
									
								
								ui/src/zone-flags.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ui/src/zone-flags.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | |||||||
|  | /** | ||||||
|  |  * Prevents Angular change detection from | ||||||
|  |  * running with certain Web Component callbacks | ||||||
|  |  */ | ||||||
|  | // eslint-disable-next-line no-underscore-dangle
 | ||||||
|  | (window as any).__Zone_disable_customElements = true; | ||||||
							
								
								
									
										15
									
								
								ui/tsconfig.app.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								ui/tsconfig.app.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | |||||||
|  | /* To learn more about this file see: https://angular.io/config/tsconfig. */ | ||||||
|  | { | ||||||
|  |   "extends": "./tsconfig.json", | ||||||
|  |   "compilerOptions": { | ||||||
|  |     "outDir": "./out-tsc/app", | ||||||
|  |     "types": [] | ||||||
|  |   }, | ||||||
|  |   "files": [ | ||||||
|  |     "src/main.ts", | ||||||
|  |     "src/polyfills.ts" | ||||||
|  |   ], | ||||||
|  |   "include": [ | ||||||
|  |     "src/**/*.d.ts" | ||||||
|  |   ] | ||||||
|  | } | ||||||
							
								
								
									
										23
									
								
								ui/tsconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								ui/tsconfig.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | |||||||
|  | /* To learn more about this file see: https://angular.io/config/tsconfig. */ | ||||||
|  | { | ||||||
|  |   "compileOnSave": false, | ||||||
|  |   "compilerOptions": { | ||||||
|  |     "baseUrl": "./", | ||||||
|  |     "outDir": "./dist/out-tsc", | ||||||
|  |     "sourceMap": true, | ||||||
|  |     "declaration": false, | ||||||
|  |     "downlevelIteration": true, | ||||||
|  |     "experimentalDecorators": true, | ||||||
|  |     "moduleResolution": "node", | ||||||
|  |     "importHelpers": true, | ||||||
|  |     "target": "es2020", | ||||||
|  |     "module": "es2020", | ||||||
|  |     "lib": ["es2018", "dom"] | ||||||
|  |   }, | ||||||
|  |   "angularCompilerOptions": { | ||||||
|  |     "enableI18nLegacyMessageIdFormat": false, | ||||||
|  |     "strictInjectionParameters": true, | ||||||
|  |     "strictInputAccessModifiers": true, | ||||||
|  |     "strictTemplates": true | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										18
									
								
								ui/tsconfig.spec.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								ui/tsconfig.spec.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,18 @@ | |||||||
|  | /* To learn more about this file see: https://angular.io/config/tsconfig. */ | ||||||
|  | { | ||||||
|  |   "extends": "./tsconfig.json", | ||||||
|  |   "compilerOptions": { | ||||||
|  |     "outDir": "./out-tsc/spec", | ||||||
|  |     "types": [ | ||||||
|  |       "jasmine" | ||||||
|  |     ] | ||||||
|  |   }, | ||||||
|  |   "files": [ | ||||||
|  |     "src/test.ts", | ||||||
|  |     "src/polyfills.ts" | ||||||
|  |   ], | ||||||
|  |   "include": [ | ||||||
|  |     "src/**/*.spec.ts", | ||||||
|  |     "src/**/*.d.ts" | ||||||
|  |   ] | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user