| @@ -0,0 +1,34 @@ | |||||
| # Specifies intentionally untracked files to ignore when using Git | |||||
| # http://git-scm.com/docs/gitignore | |||||
| *~ | |||||
| *.sw[mnpcod] | |||||
| *.log | |||||
| *.tmp | |||||
| *.tmp.* | |||||
| log.txt | |||||
| *.sublime-project | |||||
| *.sublime-workspace | |||||
| .vscode/ | |||||
| npm-debug.log* | |||||
| .idea/ | |||||
| .ionic/ | |||||
| .sourcemaps/ | |||||
| .sass-cache/ | |||||
| .tmp/ | |||||
| .versions/ | |||||
| coverage/ | |||||
| www/ | |||||
| node_modules/ | |||||
| tmp/ | |||||
| temp/ | |||||
| platforms/ | |||||
| plugins/ | |||||
| plugins/android.json | |||||
| plugins/ios.json | |||||
| $RECYCLE.BIN/ | |||||
| .DS_Store | |||||
| Thumbs.db | |||||
| UserInterfaceState.xcuserstate | |||||
| @@ -0,0 +1,187 @@ | |||||
| { | |||||
| "$schema": "./node_modules/@angular-devkit/core/src/workspace/workspace-schema.json", | |||||
| "version": 1, | |||||
| "defaultProject": "app", | |||||
| "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": [ | |||||
| { | |||||
| "input": "src/theme/variables.scss" | |||||
| }, | |||||
| { | |||||
| "input": "src/global.scss" | |||||
| } | |||||
| ], | |||||
| "scripts": [] | |||||
| }, | |||||
| "configurations": { | |||||
| "production": { | |||||
| "fileReplacements": [ | |||||
| { | |||||
| "replace": "src/environments/environment.ts", | |||||
| "with": "src/environments/environment.prod.ts" | |||||
| } | |||||
| ], | |||||
| "optimization": true, | |||||
| "outputHashing": "all", | |||||
| "sourceMap": false, | |||||
| "extractCss": true, | |||||
| "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-devkit/build-angular:tslint", | |||||
| "options": { | |||||
| "tsConfig": [ | |||||
| "tsconfig.app.json", | |||||
| "tsconfig.spec.json", | |||||
| "e2e/tsconfig.json" | |||||
| ], | |||||
| "exclude": ["**/node_modules/**"] | |||||
| } | |||||
| }, | |||||
| "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" | |||||
| } | |||||
| } | |||||
| }, | |||||
| "ionic-cordova-build": { | |||||
| "builder": "@ionic/angular-toolkit:cordova-build", | |||||
| "options": { | |||||
| "browserTarget": "app:build" | |||||
| }, | |||||
| "configurations": { | |||||
| "production": { | |||||
| "browserTarget": "app:build:production" | |||||
| } | |||||
| } | |||||
| }, | |||||
| "ionic-cordova-serve": { | |||||
| "builder": "@ionic/angular-toolkit:cordova-serve", | |||||
| "options": { | |||||
| "cordovaBuildTarget": "app:ionic-cordova-build", | |||||
| "devServerTarget": "app:serve" | |||||
| }, | |||||
| "configurations": { | |||||
| "production": { | |||||
| "cordovaBuildTarget": "app:ionic-cordova-build:production", | |||||
| "devServerTarget": "app:serve:production" | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| }, | |||||
| "cli": { | |||||
| "defaultCollection": "@ionic/angular-toolkit" | |||||
| }, | |||||
| "schematics": { | |||||
| "@ionic/angular-toolkit:component": { | |||||
| "styleext": "scss" | |||||
| }, | |||||
| "@ionic/angular-toolkit:page": { | |||||
| "styleext": "scss" | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,12 @@ | |||||
| # 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 | |||||
| # You can see what browsers were selected by your queries by running: | |||||
| # npx browserslist | |||||
| > 0.5% | |||||
| last 2 versions | |||||
| Firefox ESR | |||||
| not dead | |||||
| not IE 9-11 # For IE 9-11 support, remove 'not'. | |||||
| @@ -0,0 +1,28 @@ | |||||
| // Protractor configuration file, see link for more information | |||||
| // https://github.com/angular/protractor/blob/master/lib/config.ts | |||||
| const { SpecReporter } = require('jasmine-spec-reporter'); | |||||
| exports.config = { | |||||
| allScriptsTimeout: 11000, | |||||
| specs: [ | |||||
| './src/**/*.e2e-spec.ts' | |||||
| ], | |||||
| capabilities: { | |||||
| 'browserName': 'chrome' | |||||
| }, | |||||
| directConnect: true, | |||||
| 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: true } })); | |||||
| } | |||||
| }; | |||||
| @@ -0,0 +1,14 @@ | |||||
| import { AppPage } from './app.po'; | |||||
| describe('new App', () => { | |||||
| let page: AppPage; | |||||
| beforeEach(() => { | |||||
| page = new AppPage(); | |||||
| }); | |||||
| it('should be blank', () => { | |||||
| page.navigateTo(); | |||||
| expect(page.getParagraphText()).toContain('The world is your oyster.'); | |||||
| }); | |||||
| }); | |||||
| @@ -0,0 +1,11 @@ | |||||
| import { browser, by, element } from 'protractor'; | |||||
| export class AppPage { | |||||
| navigateTo() { | |||||
| return browser.get('/'); | |||||
| } | |||||
| getParagraphText() { | |||||
| return element(by.deepCss('app-root ion-content')).getText(); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,13 @@ | |||||
| { | |||||
| "extends": "../tsconfig.json", | |||||
| "compilerOptions": { | |||||
| "outDir": "../out-tsc/app", | |||||
| "module": "commonjs", | |||||
| "target": "es5", | |||||
| "types": [ | |||||
| "jasmine", | |||||
| "jasminewd2", | |||||
| "node" | |||||
| ] | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,5 @@ | |||||
| { | |||||
| "name": "mall-app", | |||||
| "integrations": {}, | |||||
| "type": "angular" | |||||
| } | |||||
| @@ -0,0 +1,31 @@ | |||||
| // 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-istanbul-reporter'), | |||||
| require('@angular-devkit/build-angular/plugins/karma') | |||||
| ], | |||||
| client: { | |||||
| clearContext: false // leave Jasmine Spec Runner output visible in browser | |||||
| }, | |||||
| coverageIstanbulReporter: { | |||||
| dir: require('path').join(__dirname, '../coverage'), | |||||
| reports: ['html', 'lcovonly', 'text-summary'], | |||||
| fixWebpackSourcePaths: true | |||||
| }, | |||||
| reporters: ['progress', 'kjhtml'], | |||||
| port: 9876, | |||||
| colors: true, | |||||
| logLevel: config.LOG_INFO, | |||||
| autoWatch: true, | |||||
| browsers: ['Chrome'], | |||||
| singleRun: false | |||||
| }); | |||||
| }; | |||||
| @@ -0,0 +1,59 @@ | |||||
| { | |||||
| "name": "mall-app", | |||||
| "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": "~8.1.2", | |||||
| "@angular/compiler": "~8.1.2", | |||||
| "@angular/core": "~8.1.2", | |||||
| "@angular/forms": "~8.1.2", | |||||
| "@angular/platform-browser": "~8.1.2", | |||||
| "@angular/platform-browser-dynamic": "~8.1.2", | |||||
| "@angular/router": "~8.1.2", | |||||
| "@ionic-native/core": "^5.0.0", | |||||
| "@ionic-native/splash-screen": "^5.0.0", | |||||
| "@ionic-native/status-bar": "^5.0.0", | |||||
| "@ionic/angular": "^4.7.1", | |||||
| "core-js": "^2.5.4", | |||||
| "rxjs": "~6.5.1", | |||||
| "tslib": "^1.9.0", | |||||
| "zone.js": "~0.9.1" | |||||
| }, | |||||
| "devDependencies": { | |||||
| "@angular-devkit/architect": "~0.801.2", | |||||
| "@angular-devkit/build-angular": "~0.801.2", | |||||
| "@angular-devkit/core": "~8.1.2", | |||||
| "@angular-devkit/schematics": "~8.1.2", | |||||
| "@angular/cli": "~8.1.2", | |||||
| "@angular/compiler": "~8.1.2", | |||||
| "@angular/compiler-cli": "~8.1.2", | |||||
| "@angular/language-service": "~8.1.2", | |||||
| "@ionic/angular-toolkit": "~2.0.0", | |||||
| "@types/jasmine": "~3.3.8", | |||||
| "@types/jasminewd2": "~2.0.3", | |||||
| "@types/node": "~8.9.4", | |||||
| "codelyzer": "^5.0.0", | |||||
| "jasmine-core": "~3.4.0", | |||||
| "jasmine-spec-reporter": "~4.2.1", | |||||
| "karma": "~4.1.0", | |||||
| "karma-chrome-launcher": "~2.2.0", | |||||
| "karma-coverage-istanbul-reporter": "~2.0.1", | |||||
| "karma-jasmine": "~2.0.1", | |||||
| "karma-jasmine-html-reporter": "^1.4.0", | |||||
| "protractor": "~5.4.0", | |||||
| "ts-node": "~7.0.0", | |||||
| "tslint": "~5.15.0", | |||||
| "typescript": "~3.4.3" | |||||
| }, | |||||
| "description": "An Ionic project" | |||||
| } | |||||
| @@ -0,0 +1,15 @@ | |||||
| import { NgModule } from '@angular/core'; | |||||
| import { PreloadAllModules, RouterModule, Routes } from '@angular/router'; | |||||
| const routes: Routes = [ | |||||
| { path: '', redirectTo: 'home', pathMatch: 'full' }, | |||||
| { path: 'home', loadChildren: () => import('./home/home.module').then( m => m.HomePageModule)}, | |||||
| ]; | |||||
| @NgModule({ | |||||
| imports: [ | |||||
| RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules }) | |||||
| ], | |||||
| exports: [RouterModule] | |||||
| }) | |||||
| export class AppRoutingModule { } | |||||
| @@ -0,0 +1,3 @@ | |||||
| <ion-app> | |||||
| <ion-router-outlet></ion-router-outlet> | |||||
| </ion-app> | |||||
| @@ -0,0 +1,6 @@ | |||||
| // App Styles | |||||
| // ---------------------------------------------------------------------------- | |||||
| // Put style rules here that you want to apply to the entire application. These | |||||
| // styles are for the entire app and not just one component. Additionally, this | |||||
| // file can hold Sass mixins, functions, and placeholder classes to be imported | |||||
| // and used throughout the application. | |||||
| @@ -0,0 +1,47 @@ | |||||
| import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; | |||||
| import { TestBed, async } from '@angular/core/testing'; | |||||
| import { Platform } from '@ionic/angular'; | |||||
| import { SplashScreen } from '@ionic-native/splash-screen/ngx'; | |||||
| import { StatusBar } from '@ionic-native/status-bar/ngx'; | |||||
| import { AppComponent } from './app.component'; | |||||
| describe('AppComponent', () => { | |||||
| let statusBarSpy, splashScreenSpy, platformReadySpy, platformSpy; | |||||
| beforeEach(async(() => { | |||||
| statusBarSpy = jasmine.createSpyObj('StatusBar', ['styleDefault']); | |||||
| splashScreenSpy = jasmine.createSpyObj('SplashScreen', ['hide']); | |||||
| platformReadySpy = Promise.resolve(); | |||||
| platformSpy = jasmine.createSpyObj('Platform', { ready: platformReadySpy }); | |||||
| TestBed.configureTestingModule({ | |||||
| declarations: [AppComponent], | |||||
| schemas: [CUSTOM_ELEMENTS_SCHEMA], | |||||
| providers: [ | |||||
| { provide: StatusBar, useValue: statusBarSpy }, | |||||
| { provide: SplashScreen, useValue: splashScreenSpy }, | |||||
| { provide: Platform, useValue: platformSpy }, | |||||
| ], | |||||
| }).compileComponents(); | |||||
| })); | |||||
| it('should create the app', () => { | |||||
| const fixture = TestBed.createComponent(AppComponent); | |||||
| const app = fixture.debugElement.componentInstance; | |||||
| expect(app).toBeTruthy(); | |||||
| }); | |||||
| it('should initialize the app', async () => { | |||||
| TestBed.createComponent(AppComponent); | |||||
| expect(platformSpy.ready).toHaveBeenCalled(); | |||||
| await platformReadySpy; | |||||
| expect(statusBarSpy.styleDefault).toHaveBeenCalled(); | |||||
| expect(splashScreenSpy.hide).toHaveBeenCalled(); | |||||
| }); | |||||
| // TODO: add more tests! | |||||
| }); | |||||
| @@ -0,0 +1,27 @@ | |||||
| import { Component } from '@angular/core'; | |||||
| import { Platform } from '@ionic/angular'; | |||||
| import { SplashScreen } from '@ionic-native/splash-screen/ngx'; | |||||
| import { StatusBar } from '@ionic-native/status-bar/ngx'; | |||||
| @Component({ | |||||
| selector: 'app-root', | |||||
| templateUrl: 'app.component.html', | |||||
| styleUrls: ['app.component.scss'] | |||||
| }) | |||||
| export class AppComponent { | |||||
| constructor( | |||||
| private platform: Platform, | |||||
| private splashScreen: SplashScreen, | |||||
| private statusBar: StatusBar | |||||
| ) { | |||||
| this.initializeApp(); | |||||
| } | |||||
| initializeApp() { | |||||
| this.platform.ready().then(() => { | |||||
| this.statusBar.styleDefault(); | |||||
| this.splashScreen.hide(); | |||||
| }); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,23 @@ | |||||
| import { NgModule } from '@angular/core'; | |||||
| import { BrowserModule } from '@angular/platform-browser'; | |||||
| import { RouteReuseStrategy } from '@angular/router'; | |||||
| import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; | |||||
| import { SplashScreen } from '@ionic-native/splash-screen/ngx'; | |||||
| import { StatusBar } from '@ionic-native/status-bar/ngx'; | |||||
| import { AppComponent } from './app.component'; | |||||
| import { AppRoutingModule } from './app-routing.module'; | |||||
| @NgModule({ | |||||
| declarations: [AppComponent], | |||||
| entryComponents: [], | |||||
| imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule], | |||||
| providers: [ | |||||
| StatusBar, | |||||
| SplashScreen, | |||||
| { provide: RouteReuseStrategy, useClass: IonicRouteStrategy } | |||||
| ], | |||||
| bootstrap: [AppComponent] | |||||
| }) | |||||
| export class AppModule {} | |||||
| @@ -0,0 +1,23 @@ | |||||
| import { NgModule } from '@angular/core'; | |||||
| import { CommonModule } from '@angular/common'; | |||||
| import { IonicModule } from '@ionic/angular'; | |||||
| import { FormsModule } from '@angular/forms'; | |||||
| import { RouterModule } from '@angular/router'; | |||||
| import { HomePage } from './home.page'; | |||||
| @NgModule({ | |||||
| imports: [ | |||||
| CommonModule, | |||||
| FormsModule, | |||||
| IonicModule, | |||||
| RouterModule.forChild([ | |||||
| { | |||||
| path: '', | |||||
| component: HomePage | |||||
| } | |||||
| ]) | |||||
| ], | |||||
| declarations: [HomePage] | |||||
| }) | |||||
| export class HomePageModule {} | |||||
| @@ -0,0 +1,14 @@ | |||||
| <ion-header> | |||||
| <ion-toolbar> | |||||
| <ion-title> | |||||
| Ionic Blank | |||||
| </ion-title> | |||||
| </ion-toolbar> | |||||
| </ion-header> | |||||
| <ion-content> | |||||
| <div class="ion-padding"> | |||||
| The world is your oyster. | |||||
| <p>If you get lost, the <a target="_blank" rel="noopener" href="https://ionicframework.com/docs/">docs</a> will be your guide.</p> | |||||
| </div> | |||||
| </ion-content> | |||||
| @@ -0,0 +1 @@ | |||||
| @@ -0,0 +1,24 @@ | |||||
| import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||||
| import { IonicModule } from '@ionic/angular'; | |||||
| import { HomePage } from './home.page'; | |||||
| describe('HomePage', () => { | |||||
| let component: HomePage; | |||||
| let fixture: ComponentFixture<HomePage>; | |||||
| beforeEach(async(() => { | |||||
| TestBed.configureTestingModule({ | |||||
| declarations: [ HomePage ], | |||||
| imports: [IonicModule.forRoot()] | |||||
| }).compileComponents(); | |||||
| fixture = TestBed.createComponent(HomePage); | |||||
| component = fixture.componentInstance; | |||||
| fixture.detectChanges(); | |||||
| })); | |||||
| it('should create', () => { | |||||
| expect(component).toBeTruthy(); | |||||
| }); | |||||
| }); | |||||
| @@ -0,0 +1,12 @@ | |||||
| import { Component } from '@angular/core'; | |||||
| @Component({ | |||||
| selector: 'app-home', | |||||
| templateUrl: 'home.page.html', | |||||
| styleUrls: ['home.page.scss'], | |||||
| }) | |||||
| export class HomePage { | |||||
| constructor() {} | |||||
| } | |||||
| @@ -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> | |||||
| @@ -0,0 +1,3 @@ | |||||
| export const environment = { | |||||
| production: true | |||||
| }; | |||||
| @@ -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. | |||||
| @@ -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"; | |||||
| @@ -0,0 +1,25 @@ | |||||
| <!DOCTYPE html> | |||||
| <html lang="en"> | |||||
| <head> | |||||
| <meta charset="utf-8" /> | |||||
| <title>Ionic App</title> | |||||
| <base href="/" /> | |||||
| <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> | |||||
| @@ -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)); | |||||
| @@ -0,0 +1,66 @@ | |||||
| /** | |||||
| * 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 | |||||
| */ | |||||
| /** IE10 and 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.ts'; | |||||
| * | |||||
| * 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__BLACK_LISTED_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.ts'; | |||||
| /*************************************************************************************************** | |||||
| * Zone JS is required by default for Angular itself. | |||||
| */ | |||||
| import 'zone.js/dist/zone'; // Included with Angular CLI. | |||||
| /*************************************************************************************************** | |||||
| * APPLICATION IMPORTS | |||||
| */ | |||||
| @@ -0,0 +1,20 @@ | |||||
| // 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: any; | |||||
| // 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); | |||||
| @@ -0,0 +1,77 @@ | |||||
| // 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: #0cd1e8; | |||||
| --ion-color-secondary-rgb: 12, 209, 232; | |||||
| --ion-color-secondary-contrast: #ffffff; | |||||
| --ion-color-secondary-contrast-rgb: 255, 255, 255; | |||||
| --ion-color-secondary-shade: #0bb8cc; | |||||
| --ion-color-secondary-tint: #24d6ea; | |||||
| /** tertiary **/ | |||||
| --ion-color-tertiary: #7044ff; | |||||
| --ion-color-tertiary-rgb: 112, 68, 255; | |||||
| --ion-color-tertiary-contrast: #ffffff; | |||||
| --ion-color-tertiary-contrast-rgb: 255, 255, 255; | |||||
| --ion-color-tertiary-shade: #633ce0; | |||||
| --ion-color-tertiary-tint: #7e57ff; | |||||
| /** success **/ | |||||
| --ion-color-success: #10dc60; | |||||
| --ion-color-success-rgb: 16, 220, 96; | |||||
| --ion-color-success-contrast: #ffffff; | |||||
| --ion-color-success-contrast-rgb: 255, 255, 255; | |||||
| --ion-color-success-shade: #0ec254; | |||||
| --ion-color-success-tint: #28e070; | |||||
| /** warning **/ | |||||
| --ion-color-warning: #ffce00; | |||||
| --ion-color-warning-rgb: 255, 206, 0; | |||||
| --ion-color-warning-contrast: #ffffff; | |||||
| --ion-color-warning-contrast-rgb: 255, 255, 255; | |||||
| --ion-color-warning-shade: #e0b500; | |||||
| --ion-color-warning-tint: #ffd31a; | |||||
| /** danger **/ | |||||
| --ion-color-danger: #f04141; | |||||
| --ion-color-danger-rgb: 245, 61, 61; | |||||
| --ion-color-danger-contrast: #ffffff; | |||||
| --ion-color-danger-contrast-rgb: 255, 255, 255; | |||||
| --ion-color-danger-shade: #d33939; | |||||
| --ion-color-danger-tint: #f25454; | |||||
| /** dark **/ | |||||
| --ion-color-dark: #222428; | |||||
| --ion-color-dark-rgb: 34, 34, 34; | |||||
| --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: #989aa2; | |||||
| --ion-color-medium-rgb: 152, 154, 162; | |||||
| --ion-color-medium-contrast: #ffffff; | |||||
| --ion-color-medium-contrast-rgb: 255, 255, 255; | |||||
| --ion-color-medium-shade: #86888f; | |||||
| --ion-color-medium-tint: #a2a4ab; | |||||
| /** light **/ | |||||
| --ion-color-light: #f4f5f8; | |||||
| --ion-color-light-rgb: 244, 244, 244; | |||||
| --ion-color-light-contrast: #000000; | |||||
| --ion-color-light-contrast-rgb: 0, 0, 0; | |||||
| --ion-color-light-shade: #d7d8da; | |||||
| --ion-color-light-tint: #f5f6f9; | |||||
| } | |||||
| @@ -0,0 +1,5 @@ | |||||
| /** | |||||
| * Prevents Angular change detection from | |||||
| * running with certain Web Component callbacks | |||||
| */ | |||||
| (window as any).__Zone_disable_customElements = true; | |||||
| @@ -0,0 +1,14 @@ | |||||
| { | |||||
| "extends": "./tsconfig.json", | |||||
| "compilerOptions": { | |||||
| "outDir": "./out-tsc/app", | |||||
| "types": [] | |||||
| }, | |||||
| "include": [ | |||||
| "src/**/*.ts" | |||||
| ], | |||||
| "exclude": [ | |||||
| "src/test.ts", | |||||
| "src/**/*.spec.ts" | |||||
| ] | |||||
| } | |||||
| @@ -0,0 +1,22 @@ | |||||
| { | |||||
| "compileOnSave": false, | |||||
| "compilerOptions": { | |||||
| "baseUrl": "./", | |||||
| "outDir": "./dist/out-tsc", | |||||
| "sourceMap": true, | |||||
| "declaration": false, | |||||
| "module": "esnext", | |||||
| "moduleResolution": "node", | |||||
| "emitDecoratorMetadata": true, | |||||
| "experimentalDecorators": true, | |||||
| "importHelpers": true, | |||||
| "target": "es2015", | |||||
| "typeRoots": [ | |||||
| "node_modules/@types" | |||||
| ], | |||||
| "lib": [ | |||||
| "es2018", | |||||
| "dom" | |||||
| ] | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,19 @@ | |||||
| { | |||||
| "extends": "./tsconfig.json", | |||||
| "compilerOptions": { | |||||
| "outDir": "./out-tsc/spec", | |||||
| "types": [ | |||||
| "jasmine", | |||||
| "node" | |||||
| ] | |||||
| }, | |||||
| "files": [ | |||||
| "src/test.ts", | |||||
| "src/zone-flags.ts", | |||||
| "src/polyfills.ts" | |||||
| ], | |||||
| "include": [ | |||||
| "src/**/*.spec.ts", | |||||
| "src/**/*.d.ts" | |||||
| ] | |||||
| } | |||||
| @@ -0,0 +1,89 @@ | |||||
| { | |||||
| "extends": "tslint:recommended", | |||||
| "rulesDirectory": [ | |||||
| "codelyzer" | |||||
| ], | |||||
| "rules": { | |||||
| "array-type": false, | |||||
| "arrow-parens": false, | |||||
| "deprecation": { | |||||
| "severity": "warn" | |||||
| }, | |||||
| "import-blacklist": [ | |||||
| true, | |||||
| "rxjs/Rx" | |||||
| ], | |||||
| "interface-name": false, | |||||
| "max-classes-per-file": false, | |||||
| "max-line-length": [ | |||||
| true, | |||||
| 140 | |||||
| ], | |||||
| "member-access": false, | |||||
| "member-ordering": [ | |||||
| true, | |||||
| { | |||||
| "order": [ | |||||
| "static-field", | |||||
| "instance-field", | |||||
| "static-method", | |||||
| "instance-method" | |||||
| ] | |||||
| } | |||||
| ], | |||||
| "no-consecutive-blank-lines": false, | |||||
| "no-console": [ | |||||
| true, | |||||
| "debug", | |||||
| "info", | |||||
| "time", | |||||
| "timeEnd", | |||||
| "trace" | |||||
| ], | |||||
| "no-empty": false, | |||||
| "no-inferrable-types": [ | |||||
| true, | |||||
| "ignore-params" | |||||
| ], | |||||
| "no-non-null-assertion": true, | |||||
| "no-redundant-jsdoc": true, | |||||
| "no-switch-case-fall-through": true, | |||||
| "no-use-before-declare": true, | |||||
| "no-var-requires": false, | |||||
| "object-literal-key-quotes": [ | |||||
| true, | |||||
| "as-needed" | |||||
| ], | |||||
| "object-literal-sort-keys": false, | |||||
| "ordered-imports": false, | |||||
| "quotemark": [ | |||||
| true, | |||||
| "single" | |||||
| ], | |||||
| "trailing-comma": false, | |||||
| "no-output-on-prefix": true, | |||||
| "no-inputs-metadata-property": true, | |||||
| "no-inputs-metadata-property": true, | |||||
| "no-host-metadata-property": true, | |||||
| "no-input-rename": true, | |||||
| "no-output-rename": true, | |||||
| "use-lifecycle-interface": true, | |||||
| "use-pipe-transform-interface": true, | |||||
| "one-variable-per-declaration": false, | |||||
| "component-class-suffix": [true, "Page", "Component"], | |||||
| "directive-class-suffix": true, | |||||
| "directive-selector": [ | |||||
| true, | |||||
| "attribute", | |||||
| "app", | |||||
| "camelCase" | |||||
| ], | |||||
| "component-selector": [ | |||||
| true, | |||||
| "element", | |||||
| "app", | |||||
| "page", | |||||
| "kebab-case" | |||||
| ] | |||||
| } | |||||
| } | |||||