├── .firebase └── hosting.d3d3.cache ├── .firebaserc ├── .github └── workflows │ └── nodejs.yml ├── .gitignore ├── .gradle ├── 4.10.1 │ ├── fileChanges │ │ └── last-build.bin │ ├── fileHashes │ │ └── fileHashes.lock │ ├── gc.properties │ └── taskHistory │ │ └── taskHistory.lock └── buildOutputCleanup │ ├── buildOutputCleanup.lock │ └── cache.properties ├── README.md ├── android ├── .gitignore ├── app │ ├── .npmignore │ ├── build.gradle │ ├── capacitor.build.gradle │ ├── proguard-rules.pro │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── getcapacitor │ │ │ └── myapp │ │ │ └── ExampleInstrumentedTest.java │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ │ └── capacitor.config.json │ │ ├── java │ │ │ └── io │ │ │ │ └── ionic │ │ │ │ └── starter │ │ │ │ └── MainActivity.java │ │ └── res │ │ │ ├── drawable-land-hdpi │ │ │ └── splash.png │ │ │ ├── drawable-land-mdpi │ │ │ └── splash.png │ │ │ ├── drawable-land-xhdpi │ │ │ └── splash.png │ │ │ ├── drawable-land-xxhdpi │ │ │ └── splash.png │ │ │ ├── drawable-land-xxxhdpi │ │ │ └── splash.png │ │ │ ├── drawable-port-hdpi │ │ │ └── splash.png │ │ │ ├── drawable-port-mdpi │ │ │ └── splash.png │ │ │ ├── drawable-port-xhdpi │ │ │ └── splash.png │ │ │ ├── drawable-port-xxhdpi │ │ │ └── splash.png │ │ │ ├── drawable-port-xxxhdpi │ │ │ └── splash.png │ │ │ ├── drawable-v24 │ │ │ └── ic_launcher_foreground.xml │ │ │ ├── drawable │ │ │ ├── ic_launcher_background.xml │ │ │ ├── launch_splash.xml │ │ │ └── splash.png │ │ │ ├── layout │ │ │ └── activity_main.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── values │ │ │ ├── ic_launcher_background.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ │ └── xml │ │ │ ├── config.xml │ │ │ └── file_paths.xml │ │ └── test │ │ └── java │ │ └── com │ │ └── getcapacitor │ │ └── myapp │ │ └── ExampleUnitTest.java ├── build.gradle ├── capacitor.settings.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle ├── angular.json ├── browserlist ├── capacitor.config.json ├── config.xml ├── e2e ├── protractor.conf.js ├── src │ ├── app.e2e-spec.ts │ └── app.po.ts └── tsconfig.json ├── firebase.json ├── ionic.config.json ├── ios ├── .gitignore └── App │ ├── App.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ └── contents.xcworkspacedata │ ├── App.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ ├── App │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── AppIcon-20x20@1x.png │ │ │ ├── AppIcon-20x20@2x-1.png │ │ │ ├── AppIcon-20x20@2x.png │ │ │ ├── AppIcon-20x20@3x.png │ │ │ ├── AppIcon-29x29@1x.png │ │ │ ├── AppIcon-29x29@2x-1.png │ │ │ ├── AppIcon-29x29@2x.png │ │ │ ├── AppIcon-29x29@3x.png │ │ │ ├── AppIcon-40x40@1x.png │ │ │ ├── AppIcon-40x40@2x-1.png │ │ │ ├── AppIcon-40x40@2x.png │ │ │ ├── AppIcon-40x40@3x.png │ │ │ ├── AppIcon-512@2x.png │ │ │ ├── AppIcon-60x60@2x.png │ │ │ ├── AppIcon-60x60@3x.png │ │ │ ├── AppIcon-76x76@1x.png │ │ │ ├── AppIcon-76x76@2x.png │ │ │ ├── AppIcon-83.5x83.5@2x.png │ │ │ └── Contents.json │ │ ├── Contents.json │ │ └── Splash.imageset │ │ │ ├── Contents.json │ │ │ ├── splash-2732x2732-1.png │ │ │ ├── splash-2732x2732-2.png │ │ │ └── splash-2732x2732.png │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ ├── capacitor.config.json │ └── config.xml │ └── Podfile ├── karma.conf.js ├── package-lock.json ├── package.json ├── resources ├── README.md ├── android │ ├── icon │ │ ├── drawable-hdpi-icon.png │ │ ├── drawable-ldpi-icon.png │ │ ├── drawable-mdpi-icon.png │ │ ├── drawable-xhdpi-icon.png │ │ ├── drawable-xxhdpi-icon.png │ │ └── drawable-xxxhdpi-icon.png │ ├── splash │ │ ├── drawable-land-hdpi-screen.png │ │ ├── drawable-land-ldpi-screen.png │ │ ├── drawable-land-mdpi-screen.png │ │ ├── drawable-land-xhdpi-screen.png │ │ ├── drawable-land-xxhdpi-screen.png │ │ ├── drawable-land-xxxhdpi-screen.png │ │ ├── drawable-port-hdpi-screen.png │ │ ├── drawable-port-ldpi-screen.png │ │ ├── drawable-port-mdpi-screen.png │ │ ├── drawable-port-xhdpi-screen.png │ │ ├── drawable-port-xxhdpi-screen.png │ │ └── drawable-port-xxxhdpi-screen.png │ └── xml │ │ └── network_security_config.xml ├── icon.png ├── ios │ ├── icon │ │ ├── icon-1024.png │ │ ├── icon-20.png │ │ ├── icon-20@2x.png │ │ ├── icon-20@3x.png │ │ ├── icon-24@2x.png │ │ ├── icon-27.5@2x.png │ │ ├── icon-29.png │ │ ├── icon-29@2x.png │ │ ├── icon-29@3x.png │ │ ├── icon-40.png │ │ ├── icon-40@2x.png │ │ ├── icon-40@3x.png │ │ ├── icon-44@2x.png │ │ ├── icon-50.png │ │ ├── icon-50@2x.png │ │ ├── icon-60.png │ │ ├── icon-60@2x.png │ │ ├── icon-60@3x.png │ │ ├── icon-72.png │ │ ├── icon-72@2x.png │ │ ├── icon-76.png │ │ ├── icon-76@2x.png │ │ ├── icon-83.5@2x.png │ │ ├── icon-86@2x.png │ │ ├── icon-98@2x.png │ │ ├── icon-small.png │ │ ├── icon-small@2x.png │ │ ├── icon-small@3x.png │ │ ├── icon.png │ │ └── icon@2x.png │ └── splash │ │ ├── Default-2436h.png │ │ ├── Default-568h@2x~iphone.png │ │ ├── Default-667h.png │ │ ├── Default-736h.png │ │ ├── Default-Landscape-2436h.png │ │ ├── Default-Landscape-736h.png │ │ ├── Default-Landscape@2x~ipad.png │ │ ├── Default-Landscape@~ipadpro.png │ │ ├── Default-Landscape~ipad.png │ │ ├── Default-Portrait@2x~ipad.png │ │ ├── Default-Portrait@~ipadpro.png │ │ ├── Default-Portrait~ipad.png │ │ ├── Default@2x~iphone.png │ │ ├── Default@2x~universal~anyany.png │ │ └── Default~iphone.png └── splash.png ├── server ├── mock │ ├── feedData.json │ ├── feedDelete.json │ ├── feedUpdate.json │ ├── userData.json │ └── userDataSignup.json ├── package.json └── server.js ├── src ├── app │ ├── app-routing.module.ts │ ├── app.component.html │ ├── app.component.scss │ ├── app.component.spec.ts │ ├── app.component.ts │ ├── app.module.ts │ ├── components │ │ ├── components.module.ts │ │ ├── feed-card │ │ │ ├── feed-card.component.html │ │ │ ├── feed-card.component.scss │ │ │ ├── feed-card.component.spec.ts │ │ │ └── feed-card.component.ts │ │ ├── feed-update │ │ │ ├── feed-update.component.html │ │ │ ├── feed-update.component.scss │ │ │ ├── feed-update.component.spec.ts │ │ │ └── feed-update.component.ts │ │ ├── slides │ │ │ ├── slides.component.html │ │ │ ├── slides.component.scss │ │ │ ├── slides.component.spec.ts │ │ │ └── slides.component.ts │ │ ├── start-button │ │ │ ├── start-button.component.html │ │ │ ├── start-button.component.scss │ │ │ ├── start-button.component.spec.ts │ │ │ └── start-button.component.ts │ │ └── timeago │ │ │ ├── timeago.component.html │ │ │ ├── timeago.component.scss │ │ │ ├── timeago.component.spec.ts │ │ │ └── timeago.component.ts │ ├── config │ │ └── auth-constants.ts │ ├── guards │ │ ├── home.guard.spec.ts │ │ ├── home.guard.ts │ │ ├── index.guard.spec.ts │ │ └── index.guard.ts │ ├── home │ │ ├── home.module.ts │ │ ├── home.page.html │ │ ├── home.page.scss │ │ ├── home.page.spec.ts │ │ ├── home.page.ts │ │ └── home.router.ts │ ├── index │ │ ├── index.module.ts │ │ ├── index.page.html │ │ ├── index.page.scss │ │ ├── index.page.spec.ts │ │ ├── index.page.ts │ │ └── index.router.ts │ ├── pages │ │ ├── feed │ │ │ ├── feed.module.ts │ │ │ ├── feed.page.html │ │ │ ├── feed.page.scss │ │ │ ├── feed.page.spec.ts │ │ │ └── feed.page.ts │ │ ├── login │ │ │ ├── login.module.ts │ │ │ ├── login.page.html │ │ │ ├── login.page.scss │ │ │ ├── login.page.spec.ts │ │ │ └── login.page.ts │ │ ├── messages │ │ │ ├── messages.module.ts │ │ │ ├── messages.page.html │ │ │ ├── messages.page.scss │ │ │ ├── messages.page.spec.ts │ │ │ └── messages.page.ts │ │ ├── notifications │ │ │ ├── notifications.module.ts │ │ │ ├── notifications.page.html │ │ │ ├── notifications.page.scss │ │ │ ├── notifications.page.spec.ts │ │ │ └── notifications.page.ts │ │ ├── settings │ │ │ ├── settings.module.ts │ │ │ ├── settings.page.html │ │ │ ├── settings.page.scss │ │ │ ├── settings.page.spec.ts │ │ │ └── settings.page.ts │ │ ├── signup │ │ │ ├── signup.module.ts │ │ │ ├── signup.page.html │ │ │ ├── signup.page.scss │ │ │ ├── signup.page.spec.ts │ │ │ └── signup.page.ts │ │ └── welcome │ │ │ ├── welcome.module.ts │ │ │ ├── welcome.page.html │ │ │ ├── welcome.page.scss │ │ │ ├── welcome.page.spec.ts │ │ │ └── welcome.page.ts │ ├── resolvers │ │ └── user-data.resolver.ts │ └── services │ │ ├── alert.service.spec.ts │ │ ├── alert.service.ts │ │ ├── auth.service.spec.ts │ │ ├── auth.service.ts │ │ ├── feed.service.spec.ts │ │ ├── feed.service.ts │ │ ├── http.service.ts │ │ ├── storage.service.spec.ts │ │ ├── storage.service.ts │ │ ├── toast.service.spec.ts │ │ └── toast.service.ts ├── assets │ ├── icon │ │ └── favicon.png │ ├── images │ │ └── logo.png │ └── shapes.svg ├── environments │ ├── environment.prod.ts │ └── environment.ts ├── global.scss ├── index.html ├── main.ts ├── polyfills.ts ├── test.ts ├── theme │ └── variables.scss └── zone-flags.ts ├── tsconfig.app.json ├── tsconfig.json ├── tsconfig.spec.json └── tslint.json /.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "mango-f8fea" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /.github/workflows/nodejs.yml: -------------------------------------------------------------------------------- 1 | name: Node CI 2 | 3 | on: [push] 4 | 5 | jobs: 6 | build: 7 | 8 | runs-on: ubuntu-latest 9 | 10 | strategy: 11 | matrix: 12 | node-version: [12.x] 13 | 14 | steps: 15 | - uses: actions/checkout@v1 16 | - name: Use Node.js ${{ matrix.node-version }} 17 | uses: actions/setup-node@v1 18 | with: 19 | node-version: ${{ matrix.node-version }} 20 | - name: npm install, build, and test 21 | run: | 22 | npm install 23 | ionic build --prod 24 | env: 25 | CI: true 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Specifies intentionally untracked files to ignore when using Git 2 | # http://git-scm.com/docs/gitignore 3 | 4 | *~ 5 | *.sw[mnpcod] 6 | *.log 7 | *.tmp 8 | *.tmp.* 9 | log.txt 10 | *.sublime-project 11 | *.sublime-workspace 12 | .vscode/ 13 | npm-debug.log* 14 | 15 | .idea/ 16 | .ionic/ 17 | .sourcemaps/ 18 | .sass-cache/ 19 | .tmp/ 20 | .versions/ 21 | coverage/ 22 | www/ 23 | node_modules/ 24 | tmp/ 25 | temp/ 26 | platforms/ 27 | plugins/ 28 | plugins/android.json 29 | plugins/ios.json 30 | $RECYCLE.BIN/ 31 | 32 | .DS_Store 33 | Thumbs.db 34 | UserInterfaceState.xcuserstate 35 | -------------------------------------------------------------------------------- /.gradle/4.10.1/fileChanges/last-build.bin: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gradle/4.10.1/fileHashes/fileHashes.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/.gradle/4.10.1/fileHashes/fileHashes.lock -------------------------------------------------------------------------------- /.gradle/4.10.1/gc.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/.gradle/4.10.1/gc.properties -------------------------------------------------------------------------------- /.gradle/4.10.1/taskHistory/taskHistory.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/.gradle/4.10.1/taskHistory/taskHistory.lock -------------------------------------------------------------------------------- /.gradle/buildOutputCleanup/buildOutputCleanup.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/.gradle/buildOutputCleanup/buildOutputCleanup.lock -------------------------------------------------------------------------------- /.gradle/buildOutputCleanup/cache.properties: -------------------------------------------------------------------------------- 1 | #Sun Aug 11 23:14:32 EDT 2019 2 | gradle.version=4.10.1 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # More Information 2 | 3 | https://www.9lessons.info/2019/08/ionic-5-angular-8-welcome-page.html 4 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | # NPM renames .gitignore to .npmignore 2 | # In order to prevent that, we remove the initial "." 3 | # And the CLI then renames it 4 | 5 | # Using Android gitignore template: https://github.com/github/gitignore/blob/master/Android.gitignore 6 | 7 | # Built application files 8 | *.apk 9 | *.ap_ 10 | *.aab 11 | 12 | # Files for the ART/Dalvik VM 13 | *.dex 14 | 15 | # Java class files 16 | *.class 17 | 18 | # Generated files 19 | bin/ 20 | gen/ 21 | out/ 22 | release/ 23 | 24 | # Gradle files 25 | .gradle/ 26 | build/ 27 | 28 | # Local configuration file (sdk path, etc) 29 | local.properties 30 | 31 | # Proguard folder generated by Eclipse 32 | proguard/ 33 | 34 | # Log Files 35 | *.log 36 | 37 | # Android Studio Navigation editor temp files 38 | .navigation/ 39 | 40 | # Android Studio captures folder 41 | captures/ 42 | 43 | # IntelliJ 44 | *.iml 45 | .idea/workspace.xml 46 | .idea/tasks.xml 47 | .idea/gradle.xml 48 | .idea/assetWizardSettings.xml 49 | .idea/dictionaries 50 | .idea/libraries 51 | # Android Studio 3 in .gitignore file. 52 | .idea/caches 53 | .idea/modules.xml 54 | # Comment next line if keeping position of elements in Navigation Editor is relevant for you 55 | .idea/navEditor.xml 56 | 57 | # Keystore files 58 | # Uncomment the following lines if you do not want to check your keystore files in. 59 | #*.jks 60 | #*.keystore 61 | 62 | # External native build folder generated in Android Studio 2.2 and later 63 | .externalNativeBuild 64 | 65 | # Freeline 66 | freeline.py 67 | freeline/ 68 | freeline_project_description.json 69 | 70 | # fastlane 71 | fastlane/report.xml 72 | fastlane/Preview.html 73 | fastlane/screenshots 74 | fastlane/test_output 75 | fastlane/readme.md 76 | 77 | # Version control 78 | vcs.xml 79 | 80 | # lint 81 | lint/intermediates/ 82 | lint/generated/ 83 | lint/outputs/ 84 | lint/tmp/ 85 | # lint/reports/ 86 | 87 | # Cordova plugins for Capacitor 88 | capacitor-cordova-android-plugins 89 | 90 | # Copied web assets 91 | app/src/main/assets/public 92 | -------------------------------------------------------------------------------- /android/app/.npmignore: -------------------------------------------------------------------------------- 1 | /build/* 2 | !/build/.npmkeep 3 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 28 5 | defaultConfig { 6 | applicationId "io.ionic.starter" 7 | minSdkVersion 21 8 | targetSdkVersion 28 9 | versionCode 1 10 | versionName "1.0" 11 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 12 | } 13 | buildTypes { 14 | release { 15 | minifyEnabled false 16 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 17 | } 18 | } 19 | } 20 | 21 | repositories { 22 | maven { 23 | url "https://dl.bintray.com/ionic-team/capacitor" 24 | } 25 | flatDir{ 26 | dirs '../capacitor-cordova-android-plugins/src/main/libs', 'libs' 27 | } 28 | } 29 | 30 | dependencies { 31 | implementation fileTree(include: ['*.jar'], dir: 'libs') 32 | implementation 'com.android.support:appcompat-v7:28.0.0' 33 | implementation project(':capacitor-android') 34 | testImplementation 'junit:junit:4.12' 35 | androidTestImplementation 'com.android.support.test:runner:1.0.2' 36 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 37 | implementation project(':capacitor-cordova-android-plugins') 38 | } 39 | 40 | apply from: 'capacitor.build.gradle' 41 | 42 | try { 43 | def servicesJSON = file('google-services.json') 44 | if (servicesJSON.text) { 45 | apply plugin: 'com.google.gms.google-services' 46 | } 47 | } catch(Exception e) { 48 | logger.warn("google-services.json not found, google-services plugin not applied. Push Notifications won't work") 49 | } -------------------------------------------------------------------------------- /android/app/capacitor.build.gradle: -------------------------------------------------------------------------------- 1 | // DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN 2 | 3 | android { 4 | compileOptions { 5 | sourceCompatibility JavaVersion.VERSION_1_8 6 | targetCompatibility JavaVersion.VERSION_1_8 7 | } 8 | } 9 | 10 | apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle" 11 | dependencies { 12 | 13 | 14 | } 15 | 16 | 17 | if (hasProperty('postBuildExtras')) { 18 | postBuildExtras() 19 | } 20 | -------------------------------------------------------------------------------- /android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.getcapacitor.myapp; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumented test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() throws Exception { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("com.getcapacitor.app", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | 13 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 39 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /android/app/src/main/assets/capacitor.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "appId": "io.ionic.starter", 3 | "appName": "new-ionic-angular", 4 | "bundledWebRuntime": false, 5 | "npmClient": "npm", 6 | "webDir": "www" 7 | } 8 | -------------------------------------------------------------------------------- /android/app/src/main/java/io/ionic/starter/MainActivity.java: -------------------------------------------------------------------------------- 1 | package io.ionic.starter; 2 | 3 | import android.os.Bundle; 4 | 5 | import com.getcapacitor.BridgeActivity; 6 | import com.getcapacitor.Plugin; 7 | 8 | import java.util.ArrayList; 9 | 10 | public class MainActivity extends BridgeActivity { 11 | @Override 12 | public void onCreate(Bundle savedInstanceState) { 13 | super.onCreate(savedInstanceState); 14 | 15 | // Initializes the Bridge 16 | this.init(savedInstanceState, new ArrayList>() {{ 17 | // Additional plugins you've installed go here 18 | // Ex: add(TotallyAwesomePlugin.class); 19 | }}); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-land-hdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/drawable-land-hdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-land-mdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/drawable-land-mdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-land-xhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/drawable-land-xhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-land-xxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/drawable-land-xxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-land-xxxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/drawable-land-xxxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-port-hdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/drawable-port-hdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-port-mdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/drawable-port-mdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-port-xhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/drawable-port-xhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-port-xxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/drawable-port-xxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-port-xxxhdpi/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/drawable-port-xxxhdpi/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 13 | 19 | 22 | 25 | 26 | 27 | 28 | 34 | 35 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 | 55 | 60 | 65 | 70 | 75 | 80 | 85 | 90 | 95 | 100 | 105 | 110 | 115 | 120 | 125 | 130 | 135 | 140 | 145 | 150 | 155 | 160 | 165 | 170 | 171 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_splash.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/drawable/splash.png -------------------------------------------------------------------------------- /android/app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | new-ionic-angular 4 | new-ionic-angular 5 | io.ionic.starter 6 | io.ionic.starter.fileprovider 7 | io.ionic.starter 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | 12 | 17 | 18 | 19 | 22 | -------------------------------------------------------------------------------- /android/app/src/main/res/xml/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/xml/file_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.getcapacitor.myapp; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | @Test 14 | public void addition_isCorrect() throws Exception { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | 5 | repositories { 6 | google() 7 | jcenter() 8 | } 9 | dependencies { 10 | classpath 'com.android.tools.build:gradle:3.3.2' 11 | classpath 'com.google.gms:google-services:4.2.0' 12 | 13 | // NOTE: Do not place your application dependencies here; they belong 14 | // in the individual module build.gradle files 15 | } 16 | } 17 | 18 | allprojects { 19 | repositories { 20 | google() 21 | jcenter() 22 | } 23 | } 24 | 25 | task clean(type: Delete) { 26 | delete rootProject.buildDir 27 | } 28 | -------------------------------------------------------------------------------- /android/capacitor.settings.gradle: -------------------------------------------------------------------------------- 1 | // DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN 2 | include ':capacitor-android' 3 | project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor') 4 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | org.gradle.jvmargs=-Xmx1536m 13 | 14 | # When configured, Gradle will run in incubating parallel mode. 15 | # This option should only be used with decoupled projects. More details, visit 16 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 17 | # org.gradle.parallel=true 18 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Tue Jan 30 13:14:22 CST 2018 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip 7 | -------------------------------------------------------------------------------- /android/gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 10 | DEFAULT_JVM_OPTS="" 11 | 12 | APP_NAME="Gradle" 13 | APP_BASE_NAME=`basename "$0"` 14 | 15 | # Use the maximum available, or set MAX_FD != -1 to use that value. 16 | MAX_FD="maximum" 17 | 18 | warn ( ) { 19 | echo "$*" 20 | } 21 | 22 | die ( ) { 23 | echo 24 | echo "$*" 25 | echo 26 | exit 1 27 | } 28 | 29 | # OS specific support (must be 'true' or 'false'). 30 | cygwin=false 31 | msys=false 32 | darwin=false 33 | case "`uname`" in 34 | CYGWIN* ) 35 | cygwin=true 36 | ;; 37 | Darwin* ) 38 | darwin=true 39 | ;; 40 | MINGW* ) 41 | msys=true 42 | ;; 43 | esac 44 | 45 | # Attempt to set APP_HOME 46 | # Resolve links: $0 may be a link 47 | PRG="$0" 48 | # Need this for relative symlinks. 49 | while [ -h "$PRG" ] ; do 50 | ls=`ls -ld "$PRG"` 51 | link=`expr "$ls" : '.*-> \(.*\)$'` 52 | if expr "$link" : '/.*' > /dev/null; then 53 | PRG="$link" 54 | else 55 | PRG=`dirname "$PRG"`"/$link" 56 | fi 57 | done 58 | SAVED="`pwd`" 59 | cd "`dirname \"$PRG\"`/" >/dev/null 60 | APP_HOME="`pwd -P`" 61 | cd "$SAVED" >/dev/null 62 | 63 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 64 | 65 | # Determine the Java command to use to start the JVM. 66 | if [ -n "$JAVA_HOME" ] ; then 67 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 68 | # IBM's JDK on AIX uses strange locations for the executables 69 | JAVACMD="$JAVA_HOME/jre/sh/java" 70 | else 71 | JAVACMD="$JAVA_HOME/bin/java" 72 | fi 73 | if [ ! -x "$JAVACMD" ] ; then 74 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 75 | 76 | Please set the JAVA_HOME variable in your environment to match the 77 | location of your Java installation." 78 | fi 79 | else 80 | JAVACMD="java" 81 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 82 | 83 | Please set the JAVA_HOME variable in your environment to match the 84 | location of your Java installation." 85 | fi 86 | 87 | # Increase the maximum file descriptors if we can. 88 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then 89 | MAX_FD_LIMIT=`ulimit -H -n` 90 | if [ $? -eq 0 ] ; then 91 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 92 | MAX_FD="$MAX_FD_LIMIT" 93 | fi 94 | ulimit -n $MAX_FD 95 | if [ $? -ne 0 ] ; then 96 | warn "Could not set maximum file descriptor limit: $MAX_FD" 97 | fi 98 | else 99 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 100 | fi 101 | fi 102 | 103 | # For Darwin, add options to specify how the application appears in the dock 104 | if $darwin; then 105 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 106 | fi 107 | 108 | # For Cygwin, switch paths to Windows format before running java 109 | if $cygwin ; then 110 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 111 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 112 | JAVACMD=`cygpath --unix "$JAVACMD"` 113 | 114 | # We build the pattern for arguments to be converted via cygpath 115 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 116 | SEP="" 117 | for dir in $ROOTDIRSRAW ; do 118 | ROOTDIRS="$ROOTDIRS$SEP$dir" 119 | SEP="|" 120 | done 121 | OURCYGPATTERN="(^($ROOTDIRS))" 122 | # Add a user-defined pattern to the cygpath arguments 123 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 124 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 125 | fi 126 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 127 | i=0 128 | for arg in "$@" ; do 129 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 130 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 131 | 132 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 133 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 134 | else 135 | eval `echo args$i`="\"$arg\"" 136 | fi 137 | i=$((i+1)) 138 | done 139 | case $i in 140 | (0) set -- ;; 141 | (1) set -- "$args0" ;; 142 | (2) set -- "$args0" "$args1" ;; 143 | (3) set -- "$args0" "$args1" "$args2" ;; 144 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 145 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 146 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 147 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 148 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 149 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 150 | esac 151 | fi 152 | 153 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules 154 | function splitJvmOpts() { 155 | JVM_OPTS=("$@") 156 | } 157 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS 158 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" 159 | 160 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" 161 | -------------------------------------------------------------------------------- /android/gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 12 | set DEFAULT_JVM_OPTS= 13 | 14 | set DIRNAME=%~dp0 15 | if "%DIRNAME%" == "" set DIRNAME=. 16 | set APP_BASE_NAME=%~n0 17 | set APP_HOME=%DIRNAME% 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windowz variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | if "%@eval[2+2]" == "4" goto 4NT_args 53 | 54 | :win9xME_args 55 | @rem Slurp the command line arguments. 56 | set CMD_LINE_ARGS= 57 | set _SKIP=2 58 | 59 | :win9xME_args_slurp 60 | if "x%~1" == "x" goto execute 61 | 62 | set CMD_LINE_ARGS=%* 63 | goto execute 64 | 65 | :4NT_args 66 | @rem Get arguments from the 4NT Shell from JP Software 67 | set CMD_LINE_ARGS=%$ 68 | 69 | :execute 70 | @rem Setup the command line 71 | 72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if "%ERRORLEVEL%"=="0" goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 85 | exit /b 1 86 | 87 | :mainEnd 88 | if "%OS%"=="Windows_NT" endlocal 89 | 90 | :omega 91 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | include ':capacitor-cordova-android-plugins' 3 | project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins/') 4 | 5 | apply from: 'capacitor.settings.gradle' -------------------------------------------------------------------------------- /angular.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./node_modules/@angular-devkit/core/src/workspace/workspace-schema.json", 3 | "version": 1, 4 | "defaultProject": "app", 5 | "newProjectRoot": "projects", 6 | "projects": { 7 | "app": { 8 | "root": "", 9 | "sourceRoot": "src", 10 | "projectType": "application", 11 | "prefix": "app", 12 | "schematics": {}, 13 | "architect": { 14 | "build": { 15 | "builder": "@angular-devkit/build-angular:browser", 16 | "options": { 17 | "outputPath": "www", 18 | "index": "src/index.html", 19 | "main": "src/main.ts", 20 | "polyfills": "src/polyfills.ts", 21 | "tsConfig": "tsconfig.app.json", 22 | "assets": [ 23 | { 24 | "glob": "**/*", 25 | "input": "src/assets", 26 | "output": "assets" 27 | }, 28 | { 29 | "glob": "**/*.svg", 30 | "input": "node_modules/ionicons/dist/ionicons/svg", 31 | "output": "./svg" 32 | } 33 | ], 34 | "styles": [ 35 | { 36 | "input": "src/theme/variables.scss" 37 | }, 38 | { 39 | "input": "src/global.scss" 40 | } 41 | ], 42 | "scripts": [] 43 | }, 44 | "configurations": { 45 | "production": { 46 | "fileReplacements": [ 47 | { 48 | "replace": "src/environments/environment.ts", 49 | "with": "src/environments/environment.prod.ts" 50 | } 51 | ], 52 | "optimization": true, 53 | "outputHashing": "all", 54 | "sourceMap": false, 55 | "extractCss": true, 56 | "namedChunks": false, 57 | "aot": true, 58 | "extractLicenses": true, 59 | "vendorChunk": false, 60 | "buildOptimizer": true, 61 | "budgets": [ 62 | { 63 | "type": "initial", 64 | "maximumWarning": "2mb", 65 | "maximumError": "5mb" 66 | } 67 | ] 68 | }, 69 | "ci": { 70 | "progress": false 71 | } 72 | } 73 | }, 74 | "serve": { 75 | "builder": "@angular-devkit/build-angular:dev-server", 76 | "options": { 77 | "browserTarget": "app:build" 78 | }, 79 | "configurations": { 80 | "production": { 81 | "browserTarget": "app:build:production" 82 | }, 83 | "ci": { 84 | "progress": false 85 | } 86 | } 87 | }, 88 | "extract-i18n": { 89 | "builder": "@angular-devkit/build-angular:extract-i18n", 90 | "options": { 91 | "browserTarget": "app:build" 92 | } 93 | }, 94 | "test": { 95 | "builder": "@angular-devkit/build-angular:karma", 96 | "options": { 97 | "main": "src/test.ts", 98 | "polyfills": "src/polyfills.ts", 99 | "tsConfig": "tsconfig.spec.json", 100 | "karmaConfig": "karma.conf.js", 101 | "styles": [], 102 | "scripts": [], 103 | "assets": [ 104 | { 105 | "glob": "favicon.ico", 106 | "input": "src/", 107 | "output": "/" 108 | }, 109 | { 110 | "glob": "**/*", 111 | "input": "src/assets", 112 | "output": "/assets" 113 | } 114 | ] 115 | }, 116 | "configurations": { 117 | "ci": { 118 | "progress": false, 119 | "watch": false 120 | } 121 | } 122 | }, 123 | "lint": { 124 | "builder": "@angular-devkit/build-angular:tslint", 125 | "options": { 126 | "tsConfig": [ 127 | "tsconfig.app.json", 128 | "tsconfig.spec.json", 129 | "e2e/tsconfig.json" 130 | ], 131 | "exclude": ["**/node_modules/**"] 132 | } 133 | }, 134 | "e2e": { 135 | "builder": "@angular-devkit/build-angular:protractor", 136 | "options": { 137 | "protractorConfig": "e2e/protractor.conf.js", 138 | "devServerTarget": "app:serve" 139 | }, 140 | "configurations": { 141 | "production": { 142 | "devServerTarget": "app:serve:production" 143 | }, 144 | "ci": { 145 | "devServerTarget": "app:serve:ci" 146 | } 147 | } 148 | }, 149 | "ionic-cordova-build": { 150 | "builder": "@ionic/angular-toolkit:cordova-build", 151 | "options": { 152 | "browserTarget": "app:build" 153 | }, 154 | "configurations": { 155 | "production": { 156 | "browserTarget": "app:build:production" 157 | } 158 | } 159 | }, 160 | "ionic-cordova-serve": { 161 | "builder": "@ionic/angular-toolkit:cordova-serve", 162 | "options": { 163 | "cordovaBuildTarget": "app:ionic-cordova-build", 164 | "devServerTarget": "app:serve" 165 | }, 166 | "configurations": { 167 | "production": { 168 | "cordovaBuildTarget": "app:ionic-cordova-build:production", 169 | "devServerTarget": "app:serve:production" 170 | } 171 | } 172 | } 173 | } 174 | } 175 | }, 176 | "cli": { 177 | "defaultCollection": "@ionic/angular-toolkit" 178 | }, 179 | "schematics": { 180 | "@ionic/angular-toolkit:component": { 181 | "styleext": "scss" 182 | }, 183 | "@ionic/angular-toolkit:page": { 184 | "styleext": "scss" 185 | } 186 | } 187 | } 188 | -------------------------------------------------------------------------------- /browserlist: -------------------------------------------------------------------------------- 1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below. 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | 5 | # You can see what browsers were selected by your queries by running: 6 | # npx browserslist 7 | 8 | > 0.5% 9 | last 2 versions 10 | Firefox ESR 11 | not dead 12 | not IE 9-11 # For IE 9-11 support, remove 'not'. 13 | -------------------------------------------------------------------------------- /capacitor.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "appId": "io.ionic.starter", 3 | "appName": "new-ionic-angular", 4 | "bundledWebRuntime": false, 5 | "npmClient": "npm", 6 | "webDir": "www" 7 | } 8 | -------------------------------------------------------------------------------- /config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | MyApp 4 | An awesome Ionic/Cordova app. 5 | Ionic Framework Team 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /e2e/protractor.conf.js: -------------------------------------------------------------------------------- 1 | // Protractor configuration file, see link for more information 2 | // https://github.com/angular/protractor/blob/master/lib/config.ts 3 | 4 | const { SpecReporter } = require('jasmine-spec-reporter'); 5 | 6 | exports.config = { 7 | allScriptsTimeout: 11000, 8 | specs: [ 9 | './src/**/*.e2e-spec.ts' 10 | ], 11 | capabilities: { 12 | 'browserName': 'chrome' 13 | }, 14 | directConnect: true, 15 | baseUrl: 'http://localhost:4200/', 16 | framework: 'jasmine', 17 | jasmineNodeOpts: { 18 | showColors: true, 19 | defaultTimeoutInterval: 30000, 20 | print: function() {} 21 | }, 22 | onPrepare() { 23 | require('ts-node').register({ 24 | project: require('path').join(__dirname, './tsconfig.json') 25 | }); 26 | jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /e2e/src/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { AppPage } from './app.po'; 2 | 3 | describe('new App', () => { 4 | let page: AppPage; 5 | 6 | beforeEach(() => { 7 | page = new AppPage(); 8 | }); 9 | 10 | it('should display welcome message', () => { 11 | page.navigateTo(); 12 | expect(page.getPageTitle()).toContain('Tab One'); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /e2e/src/app.po.ts: -------------------------------------------------------------------------------- 1 | import { browser, by, element } from 'protractor'; 2 | 3 | export class AppPage { 4 | navigateTo() { 5 | return browser.get('/'); 6 | } 7 | 8 | getPageTitle() { 9 | return element(by.css('ion-title')).getText(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/app", 5 | "module": "commonjs", 6 | "target": "es5", 7 | "types": [ 8 | "jasmine", 9 | "jasminewd2", 10 | "node" 11 | ] 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "hosting": { 3 | "public": "www", 4 | "ignore": [ 5 | "firebase.json", 6 | "**/.*", 7 | "**/node_modules/**" 8 | ], 9 | "rewrites": [ 10 | { 11 | "source": "**", 12 | "destination": "/index.html" 13 | } 14 | ] 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ionic.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "new-ionic-angular", 3 | "integrations": { 4 | "capacitor": {}, 5 | "cordova": {} 6 | }, 7 | "type": "angular" 8 | } 9 | -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | # NPM renames .gitignore to .npmignore 2 | # In order to prevent that, we remove the initial "." 3 | # And the CLI then renames it 4 | 5 | App/build 6 | App/Pods 7 | App/public 8 | App/Podfile.lock 9 | xcuserdata 10 | 11 | # Cordova plugins for Capacitor 12 | capacitor-cordova-ios-plugins 13 | 14 | -------------------------------------------------------------------------------- /ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/App/App.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/App/App/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Capacitor 3 | 4 | @UIApplicationMain 5 | class AppDelegate: UIResponder, UIApplicationDelegate { 6 | 7 | var window: UIWindow? 8 | 9 | 10 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 11 | // Override point for customization after application launch. 12 | return true 13 | } 14 | 15 | func applicationWillResignActive(_ application: UIApplication) { 16 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 17 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 18 | } 19 | 20 | func applicationDidEnterBackground(_ application: UIApplication) { 21 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 22 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 23 | } 24 | 25 | func applicationWillEnterForeground(_ application: UIApplication) { 26 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 27 | } 28 | 29 | func applicationDidBecomeActive(_ application: UIApplication) { 30 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 31 | } 32 | 33 | func applicationWillTerminate(_ application: UIApplication) { 34 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 35 | } 36 | 37 | func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { 38 | // Called when the app was launched with a url. Feel free to add additional processing here, 39 | // but if you want the App API to support tracking app url opens, make sure to keep this call 40 | return CAPBridge.handleOpenUrl(url, options) 41 | } 42 | 43 | func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { 44 | // Called when the app was launched with an activity, including Universal Links. 45 | // Feel free to add additional processing here, but if you want the App API to support 46 | // tracking app url opens, make sure to keep this call 47 | return CAPBridge.handleContinueActivity(userActivity, restorationHandler) 48 | } 49 | 50 | override func touchesBegan(_ touches: Set, with event: UIEvent?) { 51 | super.touchesBegan(touches, with: event) 52 | 53 | let statusBarRect = UIApplication.shared.statusBarFrame 54 | guard let touchPoint = event?.allTouches?.first?.location(in: self.window) else { return } 55 | 56 | if statusBarRect.contains(touchPoint) { 57 | NotificationCenter.default.post(CAPBridge.statusBarTappedNotification) 58 | } 59 | } 60 | 61 | #if USE_PUSH 62 | 63 | func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { 64 | NotificationCenter.default.post(name: Notification.Name(CAPNotifications.DidRegisterForRemoteNotificationsWithDeviceToken.name()), object: deviceToken) 65 | } 66 | 67 | func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { 68 | NotificationCenter.default.post(name: Notification.Name(CAPNotifications.DidFailToRegisterForRemoteNotificationsWithError.name()), object: error) 69 | } 70 | 71 | #endif 72 | 73 | } 74 | 75 | -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@1x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x-1.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@3x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@1x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x-1.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@3x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@1x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x-1.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@3x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@3x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@1x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "AppIcon-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "AppIcon-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "AppIcon-29x29@2x-1.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "AppIcon-29x29@3x.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "AppIcon-40x40@2x.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "AppIcon-40x40@3x.png", 37 | "scale" : "3x" 38 | }, 39 | { 40 | "size" : "60x60", 41 | "idiom" : "iphone", 42 | "filename" : "AppIcon-60x60@2x.png", 43 | "scale" : "2x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "AppIcon-60x60@3x.png", 49 | "scale" : "3x" 50 | }, 51 | { 52 | "size" : "20x20", 53 | "idiom" : "ipad", 54 | "filename" : "AppIcon-20x20@1x.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "AppIcon-20x20@2x-1.png", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "size" : "29x29", 65 | "idiom" : "ipad", 66 | "filename" : "AppIcon-29x29@1x.png", 67 | "scale" : "1x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "AppIcon-29x29@2x.png", 73 | "scale" : "2x" 74 | }, 75 | { 76 | "size" : "40x40", 77 | "idiom" : "ipad", 78 | "filename" : "AppIcon-40x40@1x.png", 79 | "scale" : "1x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "AppIcon-40x40@2x-1.png", 85 | "scale" : "2x" 86 | }, 87 | { 88 | "size" : "76x76", 89 | "idiom" : "ipad", 90 | "filename" : "AppIcon-76x76@1x.png", 91 | "scale" : "1x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "AppIcon-76x76@2x.png", 97 | "scale" : "2x" 98 | }, 99 | { 100 | "size" : "83.5x83.5", 101 | "idiom" : "ipad", 102 | "filename" : "AppIcon-83.5x83.5@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "1024x1024", 107 | "idiom" : "ios-marketing", 108 | "filename" : "AppIcon-512@2x.png", 109 | "scale" : "1x" 110 | } 111 | ], 112 | "info" : { 113 | "version" : 1, 114 | "author" : "xcode" 115 | } 116 | } -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/Splash.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "splash-2732x2732-2.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "splash-2732x2732-1.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "splash-2732x2732.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png -------------------------------------------------------------------------------- /ios/App/App/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /ios/App/App/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /ios/App/App/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | new-ionic-angular 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleURLTypes 22 | 23 | 24 | CFBundleURLName 25 | com.getcapacitor.capacitor 26 | CFBundleURLSchemes 27 | 28 | capacitor 29 | 30 | 31 | 32 | CFBundleVersion 33 | 1 34 | LSRequiresIPhoneOS 35 | 36 | NSAppTransportSecurity 37 | 38 | NSAllowsArbitraryLoads 39 | 40 | 41 | NSCameraUsageDescription 42 | To Take Photos and Video 43 | NSLocationAlwaysUsageDescription 44 | Always allow Geolocation? 45 | NSLocationWhenInUseUsageDescription 46 | Allow Geolocation? 47 | NSMicrophoneUsageDescription 48 | To Record Audio With Video 49 | NSPhotoLibraryAddUsageDescription 50 | Store camera photos to camera 51 | NSPhotoLibraryUsageDescription 52 | To Pick Photos from Library 53 | UILaunchStoryboardName 54 | LaunchScreen 55 | UIMainStoryboardFile 56 | Main 57 | UIRequiredDeviceCapabilities 58 | 59 | armv7 60 | 61 | UISupportedInterfaceOrientations 62 | 63 | UIInterfaceOrientationPortrait 64 | UIInterfaceOrientationLandscapeLeft 65 | UIInterfaceOrientationLandscapeRight 66 | 67 | UISupportedInterfaceOrientations~ipad 68 | 69 | UIInterfaceOrientationPortrait 70 | UIInterfaceOrientationPortraitUpsideDown 71 | UIInterfaceOrientationLandscapeLeft 72 | UIInterfaceOrientationLandscapeRight 73 | 74 | UIViewControllerBasedStatusBarAppearance 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /ios/App/App/capacitor.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "appId": "io.ionic.starter", 3 | "appName": "new-ionic-angular", 4 | "bundledWebRuntime": false, 5 | "npmClient": "npm", 6 | "webDir": "www" 7 | } 8 | -------------------------------------------------------------------------------- /ios/App/App/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /ios/App/Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '11.0' 2 | use_frameworks! 3 | 4 | # workaround to avoid Xcode 10 caching of Pods that requires 5 | # Product -> Clean Build Folder after new Cordova plugins installed 6 | # Requires CocoaPods 1.6 or newer 7 | install! 'cocoapods', :disable_input_output_paths => true 8 | 9 | def capacitor_pods 10 | # Automatic Capacitor Pod dependencies, do not delete 11 | pod 'Capacitor', :path => '../../node_modules/@capacitor/ios' 12 | pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios' 13 | 14 | # Do not delete 15 | end 16 | 17 | target 'App' do 18 | capacitor_pods 19 | # Add your Pods here 20 | end 21 | -------------------------------------------------------------------------------- /karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration file, see link for more information 2 | // https://karma-runner.github.io/1.0/config/configuration-file.html 3 | 4 | module.exports = function (config) { 5 | config.set({ 6 | basePath: '', 7 | frameworks: ['jasmine', '@angular-devkit/build-angular'], 8 | plugins: [ 9 | require('karma-jasmine'), 10 | require('karma-chrome-launcher'), 11 | require('karma-jasmine-html-reporter'), 12 | require('karma-coverage-istanbul-reporter'), 13 | require('@angular-devkit/build-angular/plugins/karma') 14 | ], 15 | client: { 16 | clearContext: false // leave Jasmine Spec Runner output visible in browser 17 | }, 18 | coverageIstanbulReporter: { 19 | dir: require('path').join(__dirname, '../coverage'), 20 | reports: ['html', 'lcovonly', 'text-summary'], 21 | fixWebpackSourcePaths: true 22 | }, 23 | reporters: ['progress', 'kjhtml'], 24 | port: 9876, 25 | colors: true, 26 | logLevel: config.LOG_INFO, 27 | autoWatch: true, 28 | browsers: ['Chrome'], 29 | singleRun: false 30 | }); 31 | }; 32 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mango", 3 | "version": "0.0.1", 4 | "author": "Ionic Framework", 5 | "homepage": "https://ionicframework.com/", 6 | "scripts": { 7 | "ng": "ng", 8 | "start": "ng serve", 9 | "build": "ng build --prod", 10 | "test": "ng test", 11 | "lint": "ng lint", 12 | "e2e": "ng e2e", 13 | "ionic-build": "ionic build --prod", 14 | "ios-add": "ionic capacitor add ios", 15 | "android-add": "ionic capacitor add android", 16 | "ios-open": "ionic capacitor open ios", 17 | "android-open": "ionic capacitor open android", 18 | "ios-copy": "ionic capacitor copy ios", 19 | "android-copy": "ionic capacitor copy android" 20 | }, 21 | "private": true, 22 | "dependencies": { 23 | "@angular/common": "~8.1.2", 24 | "@angular/compiler": "~8.1.2", 25 | "@angular/core": "~8.1.2", 26 | "@angular/forms": "~8.1.2", 27 | "@angular/platform-browser": "~8.1.2", 28 | "@angular/platform-browser-dynamic": "~8.1.2", 29 | "@angular/router": "~8.1.2", 30 | "@capacitor/android": "^1.1.1", 31 | "@capacitor/core": "1.1.1", 32 | "@capacitor/ios": "^1.1.1", 33 | "@ionic-native/core": "^5.0.0", 34 | "@ionic-native/splash-screen": "^5.0.0", 35 | "@ionic-native/status-bar": "^5.0.0", 36 | "@ionic/angular": "^4.7.1", 37 | "core-js": "^2.5.4", 38 | "rxjs": "~6.5.1", 39 | "time-ago-pipe": "^1.3.2", 40 | "tslib": "^1.9.0", 41 | "zone.js": "~0.9.1" 42 | }, 43 | "devDependencies": { 44 | "@angular-devkit/architect": "~0.801.2", 45 | "@angular-devkit/build-angular": "~0.801.2", 46 | "@angular-devkit/core": "~8.1.2", 47 | "@angular-devkit/schematics": "~8.1.2", 48 | "@angular/cli": "~8.1.2", 49 | "@angular/compiler": "~8.1.2", 50 | "@angular/compiler-cli": "~8.1.2", 51 | "@angular/language-service": "~8.1.2", 52 | "@capacitor/cli": "1.1.1", 53 | "@ionic/angular-toolkit": "~2.0.0", 54 | "@types/jasmine": "~3.3.8", 55 | "@types/jasminewd2": "~2.0.3", 56 | "@types/node": "~8.9.4", 57 | "codelyzer": "^5.0.0", 58 | "jasmine-core": "~3.4.0", 59 | "jasmine-spec-reporter": "~4.2.1", 60 | "karma": "~4.1.0", 61 | "karma-chrome-launcher": "~2.2.0", 62 | "karma-coverage-istanbul-reporter": "~2.0.1", 63 | "karma-jasmine": "~2.0.1", 64 | "karma-jasmine-html-reporter": "^1.4.0", 65 | "protractor": "~5.4.0", 66 | "ts-node": "~7.0.0", 67 | "tslint": "~5.15.0", 68 | "typescript": "~3.4.3" 69 | }, 70 | "description": "An Ionic project" 71 | } 72 | -------------------------------------------------------------------------------- /resources/README.md: -------------------------------------------------------------------------------- 1 | These are Cordova resources. You can replace icon.png and splash.png and run 2 | `ionic cordova resources` to generate custom icons and splash screens for your 3 | app. See `ionic cordova resources --help` for details. 4 | 5 | Cordova reference documentation: 6 | 7 | - Icons: https://cordova.apache.org/docs/en/latest/config_ref/images.html 8 | - Splash Screens: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-splashscreen/ 9 | -------------------------------------------------------------------------------- /resources/android/icon/drawable-hdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/android/icon/drawable-hdpi-icon.png -------------------------------------------------------------------------------- /resources/android/icon/drawable-ldpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/android/icon/drawable-ldpi-icon.png -------------------------------------------------------------------------------- /resources/android/icon/drawable-mdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/android/icon/drawable-mdpi-icon.png -------------------------------------------------------------------------------- /resources/android/icon/drawable-xhdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/android/icon/drawable-xhdpi-icon.png -------------------------------------------------------------------------------- /resources/android/icon/drawable-xxhdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/android/icon/drawable-xxhdpi-icon.png -------------------------------------------------------------------------------- /resources/android/icon/drawable-xxxhdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/android/icon/drawable-xxxhdpi-icon.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-hdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/android/splash/drawable-land-hdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-ldpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/android/splash/drawable-land-ldpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-mdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/android/splash/drawable-land-mdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-xhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/android/splash/drawable-land-xhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-xxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/android/splash/drawable-land-xxhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-xxxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/android/splash/drawable-land-xxxhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-hdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/android/splash/drawable-port-hdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-ldpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/android/splash/drawable-port-ldpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-mdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/android/splash/drawable-port-mdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-xhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/android/splash/drawable-port-xhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-xxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/android/splash/drawable-port-xxhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-xxxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/android/splash/drawable-port-xxxhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/xml/network_security_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | localhost 5 | 6 | 7 | -------------------------------------------------------------------------------- /resources/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/icon.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-1024.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-20.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-20@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-20@3x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-24@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-24@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-27.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-27.5@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-29.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-29@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-29@3x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-40.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-40@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-40@3x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-44@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-44@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-50.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-50@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-60.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-60@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-60@3x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-72.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-72@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-76.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-76@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-83.5@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-86@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-86@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-98@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-98@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-small.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-small@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon-small@3x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon.png -------------------------------------------------------------------------------- /resources/ios/icon/icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/icon/icon@2x.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-2436h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/splash/Default-2436h.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-568h@2x~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/splash/Default-568h@2x~iphone.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-667h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/splash/Default-667h.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-736h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/splash/Default-736h.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape-2436h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/splash/Default-Landscape-2436h.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape-736h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/splash/Default-Landscape-736h.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/splash/Default-Landscape@2x~ipad.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape@~ipadpro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/splash/Default-Landscape@~ipadpro.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/splash/Default-Landscape~ipad.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Portrait@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/splash/Default-Portrait@2x~ipad.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Portrait@~ipadpro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/splash/Default-Portrait@~ipadpro.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Portrait~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/splash/Default-Portrait~ipad.png -------------------------------------------------------------------------------- /resources/ios/splash/Default@2x~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/splash/Default@2x~iphone.png -------------------------------------------------------------------------------- /resources/ios/splash/Default@2x~universal~anyany.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/splash/Default@2x~universal~anyany.png -------------------------------------------------------------------------------- /resources/ios/splash/Default~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/ios/splash/Default~iphone.png -------------------------------------------------------------------------------- /resources/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/resources/splash.png -------------------------------------------------------------------------------- /server/mock/feedData.json: -------------------------------------------------------------------------------- 1 | { 2 | "feedData": [ 3 | { 4 | "feed_id": "853", 5 | "feed": "Message 1", 6 | "user_id_fk": "1", 7 | "created": "1566456759" 8 | }, 9 | { 10 | "feed_id": "850", 11 | "feed": "Message 2", 12 | "user_id_fk": "1", 13 | "created": "1566283656" 14 | }, 15 | { 16 | "feed_id": "840", 17 | "feed": "Message 3", 18 | "user_id_fk": "1", 19 | "created": "1566137529" 20 | }, 21 | { 22 | "feed_id": "788", 23 | "feed": "Message 4", 24 | "user_id_fk": "1", 25 | "created": "1565074471" 26 | }, 27 | { 28 | "feed_id": "700", 29 | "feed": "Message 5", 30 | "user_id_fk": "1", 31 | "created": "1563872497" 32 | }, 33 | { 34 | "feed_id": "699", 35 | "feed": "Message 6", 36 | "user_id_fk": "1", 37 | "created": "1563872391" 38 | }, 39 | { 40 | "feed_id": "685", 41 | "feed": "Message 7", 42 | "user_id_fk": "1", 43 | "created": "1563712541" 44 | }, 45 | { 46 | "feed_id": "675", 47 | "feed": "Message 8", 48 | "user_id_fk": "1", 49 | "created": "1563519224" 50 | }, 51 | { 52 | "feed_id": "613", 53 | "feed": "Message 9", 54 | "user_id_fk": "1", 55 | "created": "1562480696" 56 | }, 57 | { 58 | "feed_id": "596", 59 | "feed": "Message 10", 60 | "user_id_fk": "1", 61 | "created": "1562316826" 62 | } 63 | ] 64 | } -------------------------------------------------------------------------------- /server/mock/feedDelete.json: -------------------------------------------------------------------------------- 1 | {"success":{"text":"Feed deleted"}} -------------------------------------------------------------------------------- /server/mock/feedUpdate.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/server/mock/feedUpdate.json -------------------------------------------------------------------------------- /server/mock/userData.json: -------------------------------------------------------------------------------- 1 | { 2 | "userData": { 3 | "user_id": "1", 4 | "name": "Srinivas Tamada", 5 | "email": "srinivas@9lessons.info", 6 | "username": "srinivas", 7 | "token": "084627b292c29cc92d4ffc50f9fd3f3ebc029da" 8 | } 9 | } -------------------------------------------------------------------------------- /server/mock/userDataSignup.json: -------------------------------------------------------------------------------- 1 | { 2 | "userData": { 3 | "user_id": "1", 4 | "name": "Spider Man", 5 | "email": "demo@9lessons.info", 6 | "username": "demo", 7 | "token": "084627b292614e99c3dd150f9fd3f3ebc029da" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mock", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "server.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "node server.js" 9 | }, 10 | "author": "Srinivas Tamada", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /server/server.js: -------------------------------------------------------------------------------- 1 | let express = require('express'); 2 | let app = express(); 3 | 4 | let bodyParser = require('body-parser'); 5 | let backendPort = 8084; 6 | 7 | let mock = { 8 | userData: require('./mock/userData'), 9 | userDataSignup: require('./mock/userDataSignup'), 10 | feedData: require('./mock/feedData'), 11 | feedDelete: require('./mock/feedDelete') 12 | }; 13 | 14 | app.use(function(req, res, next) { 15 | res.header('Access-Control-Allow-Origin', '*'); 16 | res.header('Access-Control-Allow-Credentials', true); 17 | res.header('Access-Control-Allow-Methods', 'GET,HEAD,OPTIONS,POST,PUT'); 18 | res.header( 19 | 'Access-Control-Allow-Headers', 20 | 'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers' 21 | ); 22 | next(); 23 | }); 24 | 25 | app.use(bodyParser.json()); 26 | app.use(bodyParser.text()); 27 | app.use( 28 | bodyParser.urlencoded({ 29 | extended: true 30 | }) 31 | ); 32 | 33 | app.post('/login', function(req, res, next) { 34 | let data = JSON.parse(req.body); 35 | let username = data.username; 36 | let password = data.password; 37 | 38 | if (username === 'srinivas' && password === '123456') { 39 | return res.status(200).json(mock.userData); 40 | } else { 41 | return res 42 | .status(200) 43 | .send('{"error":{"text":"Bad request wrong username and password"}}'); 44 | } 45 | }); 46 | 47 | app.post('/signup', function(req, res, next) { 48 | let data = JSON.parse(req.body); 49 | let username = data.username; 50 | let password = data.password; 51 | let email = data.email; 52 | 53 | if ( 54 | username === 'demos' && 55 | password === '123456' && 56 | email === 'demos@9lessons.info' 57 | ) { 58 | return res.status(200).json(mock.userDataSignup); 59 | } else { 60 | return res.status(200).send('{"error":{"text":"Duplicate user"}}'); 61 | } 62 | }); 63 | 64 | app.post('/feed', function(req, res, next) { 65 | let data = JSON.parse(req.body); 66 | if (data.token && data.user_id === '1') { 67 | return res.status(200).json(mock.feedData); 68 | } else { 69 | return res.status(401).send('No Access'); 70 | } 71 | }); 72 | 73 | app.post('/feedUpdate', function(req, res, next) { 74 | let data = JSON.parse(req.body); 75 | let created = Date.now() / 1000; 76 | if (data.token && data.user_id === '1' && data.feed) { 77 | return res.status(200).send({ 78 | feedData: { 79 | feed_id: '1094', 80 | feed: data.feed, 81 | user_id_fk: '1', 82 | created: created 83 | } 84 | }); 85 | } else { 86 | return res.status(401).send('No Access'); 87 | } 88 | }); 89 | 90 | app.post('/feedDelete', function(req, res, next) { 91 | let data = JSON.parse(req.body); 92 | if (data.token && data.user_id === '1') { 93 | return res.status(200).json(mock.feedDelete); 94 | } else { 95 | return res.status(401).send('No Access'); 96 | } 97 | }); 98 | 99 | app.listen(backendPort, function() { 100 | console.log('Express server listening on port ' + backendPort); 101 | }); 102 | -------------------------------------------------------------------------------- /src/app/app-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { PreloadAllModules, RouterModule, Routes } from '@angular/router'; 3 | 4 | const routes: Routes = [ 5 | { 6 | path: '', 7 | loadChildren: () => 8 | import('./index/index.module').then(m => m.IndexPageModule) 9 | }, 10 | { 11 | path: '', 12 | loadChildren: () => import('./home/home.module').then(m => m.HomePageModule) 13 | } 14 | ]; 15 | @NgModule({ 16 | imports: [ 17 | RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules }) 18 | ], 19 | exports: [RouterModule] 20 | }) 21 | export class AppRoutingModule {} 22 | -------------------------------------------------------------------------------- /src/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/app/app.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/src/app/app.component.scss -------------------------------------------------------------------------------- /src/app/app.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 2 | import { TestBed, async } from '@angular/core/testing'; 3 | 4 | import { Platform } from '@ionic/angular'; 5 | import { SplashScreen } from '@ionic-native/splash-screen/ngx'; 6 | import { StatusBar } from '@ionic-native/status-bar/ngx'; 7 | 8 | import { AppComponent } from './app.component'; 9 | 10 | describe('AppComponent', () => { 11 | 12 | let statusBarSpy, splashScreenSpy, platformReadySpy, platformSpy; 13 | 14 | beforeEach(async(() => { 15 | statusBarSpy = jasmine.createSpyObj('StatusBar', ['styleDefault']); 16 | splashScreenSpy = jasmine.createSpyObj('SplashScreen', ['hide']); 17 | platformReadySpy = Promise.resolve(); 18 | platformSpy = jasmine.createSpyObj('Platform', { ready: platformReadySpy }); 19 | 20 | TestBed.configureTestingModule({ 21 | declarations: [AppComponent], 22 | schemas: [CUSTOM_ELEMENTS_SCHEMA], 23 | providers: [ 24 | { provide: StatusBar, useValue: statusBarSpy }, 25 | { provide: SplashScreen, useValue: splashScreenSpy }, 26 | { provide: Platform, useValue: platformSpy }, 27 | ], 28 | }).compileComponents(); 29 | })); 30 | 31 | it('should create the app', () => { 32 | const fixture = TestBed.createComponent(AppComponent); 33 | const app = fixture.debugElement.componentInstance; 34 | expect(app).toBeTruthy(); 35 | }); 36 | 37 | it('should initialize the app', async () => { 38 | TestBed.createComponent(AppComponent); 39 | expect(platformSpy.ready).toHaveBeenCalled(); 40 | await platformReadySpy; 41 | expect(statusBarSpy.styleDefault).toHaveBeenCalled(); 42 | expect(splashScreenSpy.hide).toHaveBeenCalled(); 43 | }); 44 | 45 | // TODO: add more tests! 46 | 47 | }); 48 | -------------------------------------------------------------------------------- /src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | import { Platform } from '@ionic/angular'; 4 | import { SplashScreen } from '@ionic-native/splash-screen/ngx'; 5 | import { StatusBar } from '@ionic-native/status-bar/ngx'; 6 | 7 | @Component({ 8 | selector: 'app-root', 9 | templateUrl: 'app.component.html', 10 | styleUrls: ['app.component.scss'] 11 | }) 12 | export class AppComponent { 13 | constructor( 14 | private platform: Platform, 15 | private splashScreen: SplashScreen, 16 | private statusBar: StatusBar 17 | ) { 18 | this.initializeApp(); 19 | } 20 | 21 | initializeApp() { 22 | this.platform.ready().then(() => { 23 | this.statusBar.styleDefault(); 24 | this.splashScreen.hide(); 25 | }); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { HttpClientModule } from '@angular/common/http'; 2 | import { NgModule } from '@angular/core'; 3 | import { BrowserModule } from '@angular/platform-browser'; 4 | import { RouteReuseStrategy } from '@angular/router'; 5 | import { SplashScreen } from '@ionic-native/splash-screen/ngx'; 6 | import { StatusBar } from '@ionic-native/status-bar/ngx'; 7 | import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; 8 | import { AppRoutingModule } from './app-routing.module'; 9 | import { AppComponent } from './app.component'; 10 | 11 | @NgModule({ 12 | declarations: [AppComponent], 13 | entryComponents: [], 14 | imports: [ 15 | BrowserModule, 16 | IonicModule.forRoot(), 17 | AppRoutingModule, 18 | HttpClientModule 19 | ], 20 | providers: [ 21 | StatusBar, 22 | SplashScreen, 23 | HttpClientModule, 24 | { provide: RouteReuseStrategy, useClass: IonicRouteStrategy } 25 | ], 26 | bootstrap: [AppComponent] 27 | }) 28 | export class AppModule {} 29 | -------------------------------------------------------------------------------- /src/app/components/components.module.ts: -------------------------------------------------------------------------------- 1 | import { CommonModule } from '@angular/common'; 2 | import { NgModule } from '@angular/core'; 3 | import { FormsModule } from '@angular/forms'; 4 | import { IonicModule } from '@ionic/angular'; 5 | import { TimeAgoPipe } from 'time-ago-pipe'; 6 | import { FeedCardComponent } from './feed-card/feed-card.component'; 7 | import { FeedUpdateComponent } from './feed-update/feed-update.component'; 8 | import { SlidesComponent } from './slides/slides.component'; 9 | import { StartButtonComponent } from './start-button/start-button.component'; 10 | import { TimeagoComponent } from './timeago/timeago.component'; 11 | @NgModule({ 12 | declarations: [ 13 | SlidesComponent, 14 | StartButtonComponent, 15 | FeedCardComponent, 16 | FeedUpdateComponent, 17 | TimeagoComponent, 18 | TimeAgoPipe 19 | ], 20 | exports: [ 21 | SlidesComponent, 22 | StartButtonComponent, 23 | FeedCardComponent, 24 | FeedUpdateComponent, 25 | TimeagoComponent 26 | ], 27 | imports: [CommonModule, FormsModule, IonicModule] 28 | }) 29 | export class ComponentsModule {} 30 | -------------------------------------------------------------------------------- /src/app/components/feed-card/feed-card.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 |

7 | 8 |
9 |
-------------------------------------------------------------------------------- /src/app/components/feed-card/feed-card.component.scss: -------------------------------------------------------------------------------- 1 | .right { 2 | float: right; 3 | ion-icon { 4 | font-size: 18px; 5 | } 6 | } 7 | ion-card-content{ 8 | p{ 9 | color:#333333 !important; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/app/components/feed-card/feed-card.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 3 | 4 | import { FeedCardComponent } from './feed-card.component'; 5 | 6 | describe('FeedCardComponent', () => { 7 | let component: FeedCardComponent; 8 | let fixture: ComponentFixture; 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [ FeedCardComponent ], 13 | schemas: [CUSTOM_ELEMENTS_SCHEMA], 14 | }) 15 | .compileComponents(); 16 | })); 17 | 18 | beforeEach(() => { 19 | fixture = TestBed.createComponent(FeedCardComponent); 20 | component = fixture.componentInstance; 21 | fixture.detectChanges(); 22 | }); 23 | 24 | it('should create', () => { 25 | expect(component).toBeTruthy(); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /src/app/components/feed-card/feed-card.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input, OnInit } from '@angular/core'; 2 | import { AlertService } from './../../services/alert.service'; 3 | import { FeedService } from './../../services/feed.service'; 4 | 5 | @Component({ 6 | selector: 'app-feed-card', 7 | templateUrl: './feed-card.component.html', 8 | styleUrls: ['./feed-card.component.scss'] 9 | }) 10 | export class FeedCardComponent implements OnInit { 11 | @Input() loginUser: any; 12 | feedData: any; 13 | postData = { 14 | user_id: '', 15 | token: '', 16 | feed_id: '' 17 | }; 18 | 19 | constructor( 20 | private feedSerivce: FeedService, 21 | private alertSerivce: AlertService 22 | ) {} 23 | 24 | ngOnInit() { 25 | this.feedSerivce.feedData$.subscribe((res: any) => { 26 | this.feedData = res; 27 | }); 28 | } 29 | 30 | feedDeleteAction(msgIndex: number, feed_id: any) { 31 | this.postData.user_id = this.loginUser.user_id; 32 | this.postData.token = this.loginUser.token; 33 | this.postData.feed_id = feed_id; 34 | this.alertSerivce 35 | .presentAlertConfirm('Delete feed', 'Do you want to delete this feed?') 36 | .then((res: any) => { 37 | if (res.role === 'okay') { 38 | this.feedSerivce.feedDelete(this.postData).subscribe((res: any) => { 39 | if (res.success) { 40 | this.feedSerivce.deleteFeedData(msgIndex); 41 | } 42 | }); 43 | } 44 | }); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/app/components/feed-update/feed-update.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Update 6 | -------------------------------------------------------------------------------- /src/app/components/feed-update/feed-update.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/src/app/components/feed-update/feed-update.component.scss -------------------------------------------------------------------------------- /src/app/components/feed-update/feed-update.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 3 | 4 | import { FeedUpdateComponent } from './feed-update.component'; 5 | 6 | describe('FeedUpdateComponent', () => { 7 | let component: FeedUpdateComponent; 8 | let fixture: ComponentFixture; 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [ FeedUpdateComponent ], 13 | schemas: [CUSTOM_ELEMENTS_SCHEMA], 14 | }) 15 | .compileComponents(); 16 | })); 17 | 18 | beforeEach(() => { 19 | fixture = TestBed.createComponent(FeedUpdateComponent); 20 | component = fixture.componentInstance; 21 | fixture.detectChanges(); 22 | }); 23 | 24 | it('should create', () => { 25 | expect(component).toBeTruthy(); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /src/app/components/feed-update/feed-update.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input, OnInit } from '@angular/core'; 2 | import { FeedService } from './../../services/feed.service'; 3 | 4 | @Component({ 5 | selector: 'app-feed-update', 6 | templateUrl: './feed-update.component.html', 7 | styleUrls: ['./feed-update.component.scss'] 8 | }) 9 | export class FeedUpdateComponent implements OnInit { 10 | @Input() loginUser: any; 11 | public postData = { 12 | feed: '', 13 | feed_id: '', 14 | lastCreated: '', 15 | token: '', 16 | user_id: '' 17 | }; 18 | constructor(private feedService: FeedService) {} 19 | 20 | ngOnInit() {} 21 | 22 | feedUpdateAction() { 23 | if (this.postData.feed.length > 0) { 24 | this.postData.lastCreated = ''; 25 | this.postData.user_id = this.loginUser.user_id; 26 | this.postData.token = this.loginUser.token; 27 | this.feedService.feedUpdate(this.postData).subscribe((res: any) => { 28 | this.postData.feed = ''; 29 | this.feedService.updateFeedData(res.feedData); 30 | }); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/app/components/slides/slides.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Welcome to Mango

5 |

A 9lessons demo project using Ionic latest framework.

6 |
7 | 8 |

Social Project

9 |
10 | 11 |

9lessons.info

12 |
13 |
14 | -------------------------------------------------------------------------------- /src/app/components/slides/slides.component.scss: -------------------------------------------------------------------------------- 1 | ion-slide { 2 | padding: 160px 20px 160px 20px; 3 | display: block; 4 | img { 5 | width: 100px; 6 | } 7 | 8 | h2 { 9 | font-size: 36px; 10 | font-weight: bold; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/app/components/slides/slides.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 3 | 4 | import { SlidesComponent } from './slides.component'; 5 | 6 | describe('SlidesComponent', () => { 7 | let component: SlidesComponent; 8 | let fixture: ComponentFixture; 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [ SlidesComponent ], 13 | schemas: [CUSTOM_ELEMENTS_SCHEMA], 14 | }) 15 | .compileComponents(); 16 | })); 17 | 18 | beforeEach(() => { 19 | fixture = TestBed.createComponent(SlidesComponent); 20 | component = fixture.componentInstance; 21 | fixture.detectChanges(); 22 | }); 23 | 24 | it('should create', () => { 25 | expect(component).toBeTruthy(); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /src/app/components/slides/slides.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-slides', 5 | templateUrl: './slides.component.html', 6 | styleUrls: ['./slides.component.scss'] 7 | }) 8 | export class SlidesComponent { 9 | slideOpts = { 10 | speed: 400 11 | }; 12 | constructor() {} 13 | } 14 | -------------------------------------------------------------------------------- /src/app/components/start-button/start-button.component.html: -------------------------------------------------------------------------------- 1 | Start -------------------------------------------------------------------------------- /src/app/components/start-button/start-button.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/src/app/components/start-button/start-button.component.scss -------------------------------------------------------------------------------- /src/app/components/start-button/start-button.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 3 | 4 | import { StartButtonComponent } from './start-button.component'; 5 | 6 | describe('StartButtonComponent', () => { 7 | let component: StartButtonComponent; 8 | let fixture: ComponentFixture; 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [ StartButtonComponent ], 13 | schemas: [CUSTOM_ELEMENTS_SCHEMA], 14 | }) 15 | .compileComponents(); 16 | })); 17 | 18 | beforeEach(() => { 19 | fixture = TestBed.createComponent(StartButtonComponent); 20 | component = fixture.componentInstance; 21 | fixture.detectChanges(); 22 | }); 23 | 24 | it('should create', () => { 25 | expect(component).toBeTruthy(); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /src/app/components/start-button/start-button.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { Router } from '@angular/router'; 3 | 4 | @Component({ 5 | selector: 'app-start-button', 6 | templateUrl: './start-button.component.html', 7 | styleUrls: ['./start-button.component.scss'] 8 | }) 9 | export class StartButtonComponent implements OnInit { 10 | constructor(private router: Router) {} 11 | 12 | ngOnInit() {} 13 | 14 | navigateToLogin() { 15 | this.router.navigate(['/login']); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/app/components/timeago/timeago.component.html: -------------------------------------------------------------------------------- 1 |
2 | {{newTime | timeAgo}} 3 |
-------------------------------------------------------------------------------- /src/app/components/timeago/timeago.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/src/app/components/timeago/timeago.component.scss -------------------------------------------------------------------------------- /src/app/components/timeago/timeago.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 3 | 4 | import { TimeagoComponent } from './timeago.component'; 5 | 6 | describe('TimeagoComponent', () => { 7 | let component: TimeagoComponent; 8 | let fixture: ComponentFixture; 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [ TimeagoComponent ], 13 | schemas: [CUSTOM_ELEMENTS_SCHEMA], 14 | }) 15 | .compileComponents(); 16 | })); 17 | 18 | beforeEach(() => { 19 | fixture = TestBed.createComponent(TimeagoComponent); 20 | component = fixture.componentInstance; 21 | fixture.detectChanges(); 22 | }); 23 | 24 | it('should create', () => { 25 | expect(component).toBeTruthy(); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /src/app/components/timeago/timeago.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, Input } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-timeago', 5 | templateUrl: './timeago.component.html', 6 | styleUrls: ['./timeago.component.scss'], 7 | }) 8 | export class TimeagoComponent implements OnInit { 9 | @Input() created: any; 10 | newTime: any; 11 | constructor() { } 12 | 13 | ngOnInit() { 14 | this.newTime = this.converTime(this.created);; 15 | } 16 | 17 | converTime(time: any) { 18 | let a = new Date(time * 1000); 19 | return a; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/app/config/auth-constants.ts: -------------------------------------------------------------------------------- 1 | export class AuthConstants { 2 | public static readonly AUTH = 'userData'; 3 | } 4 | -------------------------------------------------------------------------------- /src/app/guards/home.guard.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, async, inject } from '@angular/core/testing'; 2 | 3 | import { HomeGuard } from './home.guard'; 4 | 5 | describe('HomeGuard', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [HomeGuard] 9 | }); 10 | }); 11 | 12 | it('should ...', inject([HomeGuard], (guard: HomeGuard) => { 13 | expect(guard).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/guards/home.guard.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { CanActivate, Router } from '@angular/router'; 3 | import { AuthConstants } from '../config/auth-constants'; 4 | import { StorageService } from '../services/storage.service'; 5 | 6 | @Injectable({ 7 | providedIn: 'root' 8 | }) 9 | export class HomeGuard implements CanActivate { 10 | constructor(public storageService: StorageService, public router: Router) {} 11 | canActivate(): Promise { 12 | return new Promise(resolve => { 13 | this.storageService 14 | .get(AuthConstants.AUTH) 15 | .then(res => { 16 | if (res) { 17 | resolve(true); 18 | } else { 19 | this.router.navigate(['login']); 20 | resolve(false); 21 | } 22 | }) 23 | .catch(err => { 24 | resolve(false); 25 | }); 26 | }); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/app/guards/index.guard.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, async, inject } from '@angular/core/testing'; 2 | 3 | import { IndexGuard } from './index.guard'; 4 | 5 | describe('IndexGuard', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [IndexGuard] 9 | }); 10 | }); 11 | 12 | it('should ...', inject([IndexGuard], (guard: IndexGuard) => { 13 | expect(guard).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/guards/index.guard.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { CanActivate, Router } from '@angular/router'; 3 | import { AuthConstants } from '../config/auth-constants'; 4 | import { StorageService } from '../services/storage.service'; 5 | 6 | @Injectable({ 7 | providedIn: 'root' 8 | }) 9 | export class IndexGuard implements CanActivate { 10 | constructor(public storageService: StorageService, public router: Router) {} 11 | canActivate(): Promise { 12 | return new Promise(resolve => { 13 | this.storageService 14 | .get(AuthConstants.AUTH) 15 | .then(res => { 16 | if (res) { 17 | this.router.navigate(['home']); 18 | resolve(false); 19 | } else resolve(true); 20 | }) 21 | .catch(err => { 22 | resolve(true); 23 | }); 24 | }); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/app/home/home.module.ts: -------------------------------------------------------------------------------- 1 | import { CommonModule } from '@angular/common'; 2 | import { NgModule } from '@angular/core'; 3 | import { FormsModule } from '@angular/forms'; 4 | import { IonicModule } from '@ionic/angular'; 5 | import { HomePage } from './home.page'; 6 | import { HomeRouter } from './home.router'; 7 | 8 | @NgModule({ 9 | imports: [CommonModule, FormsModule, IonicModule, HomeRouter], 10 | declarations: [HomePage] 11 | }) 12 | export class HomePageModule {} -------------------------------------------------------------------------------- /src/app/home/home.page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Feed 7 | 8 | 9 | 10 | 11 | Messages 12 | 13 | 14 | 15 | 16 | Contact 17 | 18 | 19 | 20 | 21 | Settings 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/app/home/home.page.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/src/app/home/home.page.scss -------------------------------------------------------------------------------- /src/app/home/home.page.spec.ts: -------------------------------------------------------------------------------- 1 | import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 3 | 4 | import { HomePage } from './home.page'; 5 | 6 | describe('HomePage', () => { 7 | let component: HomePage; 8 | let fixture: ComponentFixture; 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [ HomePage ], 13 | schemas: [CUSTOM_ELEMENTS_SCHEMA], 14 | }) 15 | .compileComponents(); 16 | })); 17 | 18 | beforeEach(() => { 19 | fixture = TestBed.createComponent(HomePage); 20 | component = fixture.componentInstance; 21 | fixture.detectChanges(); 22 | }); 23 | 24 | it('should create', () => { 25 | expect(component).toBeTruthy(); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /src/app/home/home.page.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-home', 5 | templateUrl: './home.page.html', 6 | styleUrls: ['./home.page.scss'], 7 | }) 8 | export class HomePage implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/home/home.router.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { HomeGuard } from '../guards/home.guard'; 4 | import { UserDataResolver } from '../resolvers/user-data.resolver'; 5 | import { HomePage } from './home.page'; 6 | 7 | const routes: Routes = [ 8 | { 9 | path: 'home', 10 | component: HomePage, 11 | canActivate: [HomeGuard], 12 | resolve: { 13 | userData: UserDataResolver 14 | }, 15 | children: [ 16 | { 17 | path: 'feed', 18 | children: [ 19 | { 20 | path: '', 21 | loadChildren: () => 22 | import('../pages/feed/feed.module').then(m => m.FeedPageModule) 23 | } 24 | ] 25 | }, 26 | { 27 | path: 'messages', 28 | children: [ 29 | { 30 | path: '', 31 | loadChildren: () => 32 | import('../pages/messages/messages.module').then( 33 | m => m.MessagesPageModule 34 | ) 35 | } 36 | ] 37 | }, 38 | { 39 | path: 'notifications', 40 | children: [ 41 | { 42 | path: '', 43 | loadChildren: () => 44 | import('../pages/notifications/notifications.module').then( 45 | m => m.NotificationsPageModule 46 | ) 47 | } 48 | ] 49 | }, 50 | { 51 | path: 'settings', 52 | children: [ 53 | { 54 | path: '', 55 | loadChildren: () => 56 | import('../pages/settings/settings.module').then( 57 | m => m.SettingsPageModule 58 | ) 59 | } 60 | ] 61 | }, 62 | { 63 | path: '', 64 | redirectTo: '/home/feed', 65 | pathMatch: 'full' 66 | } 67 | ] 68 | } 69 | ]; 70 | 71 | @NgModule({ 72 | imports: [RouterModule.forChild(routes)], 73 | exports: [RouterModule] 74 | }) 75 | export class HomeRouter {} 76 | -------------------------------------------------------------------------------- /src/app/index/index.module.ts: -------------------------------------------------------------------------------- 1 | import { CommonModule } from '@angular/common'; 2 | import { NgModule } from '@angular/core'; 3 | import { FormsModule } from '@angular/forms'; 4 | import { IonicModule } from '@ionic/angular'; 5 | import { IndexPage } from './index.page'; 6 | import { IndexRouter } from './index.router'; 7 | 8 | @NgModule({ 9 | imports: [CommonModule, FormsModule, IonicModule, IndexRouter], 10 | declarations: [IndexPage] 11 | }) 12 | export class IndexPageModule {} 13 | -------------------------------------------------------------------------------- /src/app/index/index.page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/app/index/index.page.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/src/app/index/index.page.scss -------------------------------------------------------------------------------- /src/app/index/index.page.spec.ts: -------------------------------------------------------------------------------- 1 | import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 3 | 4 | import { IndexPage } from './index.page'; 5 | 6 | describe('IndexPage', () => { 7 | let component: IndexPage; 8 | let fixture: ComponentFixture; 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [ IndexPage ], 13 | schemas: [CUSTOM_ELEMENTS_SCHEMA], 14 | }) 15 | .compileComponents(); 16 | })); 17 | 18 | beforeEach(() => { 19 | fixture = TestBed.createComponent(IndexPage); 20 | component = fixture.componentInstance; 21 | fixture.detectChanges(); 22 | }); 23 | 24 | it('should create', () => { 25 | expect(component).toBeTruthy(); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /src/app/index/index.page.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-index', 5 | templateUrl: './index.page.html', 6 | styleUrls: ['./index.page.scss'], 7 | }) 8 | export class IndexPage implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/index/index.router.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { IndexGuard } from '../guards/index.guard'; 4 | import { IndexPage } from './index.page'; 5 | 6 | const routes: Routes = [ 7 | { 8 | path: '', 9 | component: IndexPage, 10 | canActivate: [IndexGuard], 11 | children: [ 12 | { 13 | path: '', 14 | loadChildren: () => 15 | import('../pages/welcome/welcome.module').then( 16 | m => m.WelcomePageModule 17 | ) 18 | }, 19 | { 20 | path: 'login', 21 | loadChildren: () => 22 | import('../pages/login/login.module').then(m => m.LoginPageModule) 23 | }, 24 | { 25 | path: 'signup', 26 | loadChildren: () => 27 | import('../pages/signup/signup.module').then(m => m.SignupPageModule) 28 | } 29 | ] 30 | } 31 | ]; 32 | 33 | @NgModule({ 34 | imports: [RouterModule.forChild(routes)], 35 | exports: [RouterModule] 36 | }) 37 | export class IndexRouter {} 38 | -------------------------------------------------------------------------------- /src/app/pages/feed/feed.module.ts: -------------------------------------------------------------------------------- 1 | import { CommonModule } from '@angular/common'; 2 | import { NgModule } from '@angular/core'; 3 | import { FormsModule } from '@angular/forms'; 4 | import { RouterModule, Routes } from '@angular/router'; 5 | import { IonicModule } from '@ionic/angular'; 6 | import { ComponentsModule } from './../../components/components.module'; 7 | import { FeedPage } from './feed.page'; 8 | 9 | const routes: Routes = [ 10 | { 11 | path: '', 12 | component: FeedPage 13 | } 14 | ]; 15 | 16 | @NgModule({ 17 | imports: [ 18 | CommonModule, 19 | ComponentsModule, 20 | FormsModule, 21 | IonicModule, 22 | RouterModule.forChild(routes) 23 | ], 24 | declarations: [FeedPage] 25 | }) 26 | export class FeedPageModule {} 27 | -------------------------------------------------------------------------------- /src/app/pages/feed/feed.page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Feed 4 | 5 | 6 | 7 | 8 | 9 | 10 |

Welcome to {{ authUser?.name }}

11 |
12 | 13 | 14 |
-------------------------------------------------------------------------------- /src/app/pages/feed/feed.page.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/src/app/pages/feed/feed.page.scss -------------------------------------------------------------------------------- /src/app/pages/feed/feed.page.spec.ts: -------------------------------------------------------------------------------- 1 | import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 3 | 4 | import { FeedPage } from './feed.page'; 5 | 6 | describe('FeedPage', () => { 7 | let component: FeedPage; 8 | let fixture: ComponentFixture; 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [ FeedPage ], 13 | schemas: [CUSTOM_ELEMENTS_SCHEMA], 14 | }) 15 | .compileComponents(); 16 | })); 17 | 18 | beforeEach(() => { 19 | fixture = TestBed.createComponent(FeedPage); 20 | component = fixture.componentInstance; 21 | fixture.detectChanges(); 22 | }); 23 | 24 | it('should create', () => { 25 | expect(component).toBeTruthy(); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /src/app/pages/feed/feed.page.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { FeedService } from 'src/app/services/feed.service'; 3 | import { AuthService } from './../../services/auth.service'; 4 | import { ToastService } from './../../services/toast.service'; 5 | 6 | @Component({ 7 | selector: 'app-feed', 8 | templateUrl: './feed.page.html', 9 | styleUrls: ['./feed.page.scss'] 10 | }) 11 | export class FeedPage implements OnInit { 12 | public authUser: any; 13 | 14 | postData = { 15 | user_id: '', 16 | token: '' 17 | }; 18 | constructor( 19 | private auth: AuthService, 20 | private feedSerive: FeedService, 21 | private toastService: ToastService 22 | ) {} 23 | 24 | ngOnInit() { 25 | this.auth.userData$.subscribe((res: any) => { 26 | this.authUser = res; 27 | this.feedData(); 28 | }); 29 | } 30 | 31 | feedData() { 32 | console.log(this.authUser); 33 | this.postData.user_id = this.authUser.user_id; 34 | this.postData.token = this.authUser.token; 35 | if (this.postData.user_id && this.postData.token) { 36 | this.feedSerive.feedData(this.postData).subscribe( 37 | (res: any) => { 38 | this.feedSerive.changeFeedData(res.feedData); 39 | }, 40 | (error: any) => { 41 | this.toastService.presentToast('Network Issue.'); 42 | } 43 | ); 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/app/pages/login/login.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { FormsModule } from '@angular/forms'; 4 | import { Routes, RouterModule } from '@angular/router'; 5 | 6 | import { IonicModule } from '@ionic/angular'; 7 | 8 | import { LoginPage } from './login.page'; 9 | 10 | const routes: Routes = [ 11 | { 12 | path: '', 13 | component: LoginPage 14 | } 15 | ]; 16 | 17 | @NgModule({ 18 | imports: [ 19 | CommonModule, 20 | FormsModule, 21 | IonicModule, 22 | RouterModule.forChild(routes) 23 | ], 24 | declarations: [LoginPage] 25 | }) 26 | export class LoginPageModule {} 27 | -------------------------------------------------------------------------------- /src/app/pages/login/login.page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Login 4 | 5 | 6 | 7 | 8 |
9 | 10 |

Sign In

11 |
12 |
13 | 14 | 15 | Username 16 | 17 | 18 | 19 | 20 | Password 21 | 22 | 23 | 24 | 25 | Create Account 26 | 27 | 28 | Login 29 |
30 |
-------------------------------------------------------------------------------- /src/app/pages/login/login.page.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/src/app/pages/login/login.page.scss -------------------------------------------------------------------------------- /src/app/pages/login/login.page.spec.ts: -------------------------------------------------------------------------------- 1 | import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 3 | 4 | import { LoginPage } from './login.page'; 5 | 6 | describe('LoginPage', () => { 7 | let component: LoginPage; 8 | let fixture: ComponentFixture; 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [ LoginPage ], 13 | schemas: [CUSTOM_ELEMENTS_SCHEMA], 14 | }) 15 | .compileComponents(); 16 | })); 17 | 18 | beforeEach(() => { 19 | fixture = TestBed.createComponent(LoginPage); 20 | component = fixture.componentInstance; 21 | fixture.detectChanges(); 22 | }); 23 | 24 | it('should create', () => { 25 | expect(component).toBeTruthy(); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /src/app/pages/login/login.page.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { Router } from '@angular/router'; 3 | import { AuthConstants } from '../../config/auth-constants'; 4 | import { AuthService } from './../../services/auth.service'; 5 | import { StorageService } from './../../services/storage.service'; 6 | import { ToastService } from './../../services/toast.service'; 7 | 8 | @Component({ 9 | selector: 'app-login', 10 | templateUrl: './login.page.html', 11 | styleUrls: ['./login.page.scss'] 12 | }) 13 | export class LoginPage implements OnInit { 14 | postData = { 15 | username: '', 16 | password: '' 17 | }; 18 | 19 | constructor( 20 | private router: Router, 21 | private authService: AuthService, 22 | private storageService: StorageService, 23 | private toastService: ToastService 24 | ) {} 25 | 26 | ngOnInit() {} 27 | 28 | validateInputs() { 29 | console.log(this.postData); 30 | let username = this.postData.username.trim(); 31 | let password = this.postData.password.trim(); 32 | return ( 33 | this.postData.username && 34 | this.postData.password && 35 | username.length > 0 && 36 | password.length > 0 37 | ); 38 | } 39 | 40 | loginAction() { 41 | if (this.validateInputs()) { 42 | this.authService.login(this.postData).subscribe( 43 | (res: any) => { 44 | if (res.userData) { 45 | // Storing the User data. 46 | this.storageService 47 | .store(AuthConstants.AUTH, res.userData) 48 | .then(res => { 49 | this.router.navigate(['home']); 50 | }); 51 | } else { 52 | this.toastService.presentToast('Incorrect username and password.'); 53 | } 54 | }, 55 | (error: any) => { 56 | this.toastService.presentToast('Network Issue.'); 57 | } 58 | ); 59 | } else { 60 | this.toastService.presentToast( 61 | 'Please enter email/username or password.' 62 | ); 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/app/pages/messages/messages.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { FormsModule } from '@angular/forms'; 4 | import { Routes, RouterModule } from '@angular/router'; 5 | 6 | import { IonicModule } from '@ionic/angular'; 7 | 8 | import { MessagesPage } from './messages.page'; 9 | 10 | const routes: Routes = [ 11 | { 12 | path: '', 13 | component: MessagesPage 14 | } 15 | ]; 16 | 17 | @NgModule({ 18 | imports: [ 19 | CommonModule, 20 | FormsModule, 21 | IonicModule, 22 | RouterModule.forChild(routes) 23 | ], 24 | declarations: [MessagesPage] 25 | }) 26 | export class MessagesPageModule {} 27 | -------------------------------------------------------------------------------- /src/app/pages/messages/messages.page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Messages 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/app/pages/messages/messages.page.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/src/app/pages/messages/messages.page.scss -------------------------------------------------------------------------------- /src/app/pages/messages/messages.page.spec.ts: -------------------------------------------------------------------------------- 1 | import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 3 | 4 | import { MessagesPage } from './messages.page'; 5 | 6 | describe('MessagesPage', () => { 7 | let component: MessagesPage; 8 | let fixture: ComponentFixture; 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [ MessagesPage ], 13 | schemas: [CUSTOM_ELEMENTS_SCHEMA], 14 | }) 15 | .compileComponents(); 16 | })); 17 | 18 | beforeEach(() => { 19 | fixture = TestBed.createComponent(MessagesPage); 20 | component = fixture.componentInstance; 21 | fixture.detectChanges(); 22 | }); 23 | 24 | it('should create', () => { 25 | expect(component).toBeTruthy(); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /src/app/pages/messages/messages.page.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-messages', 5 | templateUrl: './messages.page.html', 6 | styleUrls: ['./messages.page.scss'], 7 | }) 8 | export class MessagesPage implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/pages/notifications/notifications.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { FormsModule } from '@angular/forms'; 4 | import { Routes, RouterModule } from '@angular/router'; 5 | 6 | import { IonicModule } from '@ionic/angular'; 7 | 8 | import { NotificationsPage } from './notifications.page'; 9 | 10 | const routes: Routes = [ 11 | { 12 | path: '', 13 | component: NotificationsPage 14 | } 15 | ]; 16 | 17 | @NgModule({ 18 | imports: [ 19 | CommonModule, 20 | FormsModule, 21 | IonicModule, 22 | RouterModule.forChild(routes) 23 | ], 24 | declarations: [NotificationsPage] 25 | }) 26 | export class NotificationsPageModule {} 27 | -------------------------------------------------------------------------------- /src/app/pages/notifications/notifications.page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Notifications 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/app/pages/notifications/notifications.page.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/src/app/pages/notifications/notifications.page.scss -------------------------------------------------------------------------------- /src/app/pages/notifications/notifications.page.spec.ts: -------------------------------------------------------------------------------- 1 | import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 3 | 4 | import { NotificationsPage } from './notifications.page'; 5 | 6 | describe('NotificationsPage', () => { 7 | let component: NotificationsPage; 8 | let fixture: ComponentFixture; 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [ NotificationsPage ], 13 | schemas: [CUSTOM_ELEMENTS_SCHEMA], 14 | }) 15 | .compileComponents(); 16 | })); 17 | 18 | beforeEach(() => { 19 | fixture = TestBed.createComponent(NotificationsPage); 20 | component = fixture.componentInstance; 21 | fixture.detectChanges(); 22 | }); 23 | 24 | it('should create', () => { 25 | expect(component).toBeTruthy(); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /src/app/pages/notifications/notifications.page.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-notifications', 5 | templateUrl: './notifications.page.html', 6 | styleUrls: ['./notifications.page.scss'], 7 | }) 8 | export class NotificationsPage implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/pages/settings/settings.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { FormsModule } from '@angular/forms'; 4 | import { Routes, RouterModule } from '@angular/router'; 5 | 6 | import { IonicModule } from '@ionic/angular'; 7 | 8 | import { SettingsPage } from './settings.page'; 9 | 10 | const routes: Routes = [ 11 | { 12 | path: '', 13 | component: SettingsPage 14 | } 15 | ]; 16 | 17 | @NgModule({ 18 | imports: [ 19 | CommonModule, 20 | FormsModule, 21 | IonicModule, 22 | RouterModule.forChild(routes) 23 | ], 24 | declarations: [SettingsPage] 25 | }) 26 | export class SettingsPageModule {} 27 | -------------------------------------------------------------------------------- /src/app/pages/settings/settings.page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Settings 4 | 5 | 6 | 7 | 8 | Log Out. 9 | -------------------------------------------------------------------------------- /src/app/pages/settings/settings.page.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/src/app/pages/settings/settings.page.scss -------------------------------------------------------------------------------- /src/app/pages/settings/settings.page.spec.ts: -------------------------------------------------------------------------------- 1 | import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 3 | 4 | import { SettingsPage } from './settings.page'; 5 | 6 | describe('SettingsPage', () => { 7 | let component: SettingsPage; 8 | let fixture: ComponentFixture; 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [ SettingsPage ], 13 | schemas: [CUSTOM_ELEMENTS_SCHEMA], 14 | }) 15 | .compileComponents(); 16 | })); 17 | 18 | beforeEach(() => { 19 | fixture = TestBed.createComponent(SettingsPage); 20 | component = fixture.componentInstance; 21 | fixture.detectChanges(); 22 | }); 23 | 24 | it('should create', () => { 25 | expect(component).toBeTruthy(); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /src/app/pages/settings/settings.page.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { AuthService } from './../../services/auth.service'; 3 | 4 | @Component({ 5 | selector: 'app-settings', 6 | templateUrl: './settings.page.html', 7 | styleUrls: ['./settings.page.scss'] 8 | }) 9 | export class SettingsPage implements OnInit { 10 | constructor(private authService: AuthService) {} 11 | 12 | ngOnInit() {} 13 | 14 | logoutAction() { 15 | this.authService.logout(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/app/pages/signup/signup.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { FormsModule } from '@angular/forms'; 4 | import { Routes, RouterModule } from '@angular/router'; 5 | 6 | import { IonicModule } from '@ionic/angular'; 7 | 8 | import { SignupPage } from './signup.page'; 9 | 10 | const routes: Routes = [ 11 | { 12 | path: '', 13 | component: SignupPage 14 | } 15 | ]; 16 | 17 | @NgModule({ 18 | imports: [ 19 | CommonModule, 20 | FormsModule, 21 | IonicModule, 22 | RouterModule.forChild(routes) 23 | ], 24 | declarations: [SignupPage] 25 | }) 26 | export class SignupPageModule {} 27 | -------------------------------------------------------------------------------- /src/app/pages/signup/signup.page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Registration 4 | 5 | 6 | 7 | 8 |
9 | 10 |

Create Account

11 |
12 |
13 | 14 | 15 | Name 16 | 17 | 18 | 19 | Email 20 | 21 | 22 | 23 | Username 24 | 25 | 26 | 27 | 28 | Password 29 | 30 | 31 | 32 | 33 | Already have an account? Sign in. 34 | 35 | 36 | Registration 37 |
38 |
-------------------------------------------------------------------------------- /src/app/pages/signup/signup.page.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/src/app/pages/signup/signup.page.scss -------------------------------------------------------------------------------- /src/app/pages/signup/signup.page.spec.ts: -------------------------------------------------------------------------------- 1 | import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 3 | 4 | import { SignupPage } from './signup.page'; 5 | 6 | describe('SignupPage', () => { 7 | let component: SignupPage; 8 | let fixture: ComponentFixture; 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [ SignupPage ], 13 | schemas: [CUSTOM_ELEMENTS_SCHEMA], 14 | }) 15 | .compileComponents(); 16 | })); 17 | 18 | beforeEach(() => { 19 | fixture = TestBed.createComponent(SignupPage); 20 | component = fixture.componentInstance; 21 | fixture.detectChanges(); 22 | }); 23 | 24 | it('should create', () => { 25 | expect(component).toBeTruthy(); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /src/app/pages/signup/signup.page.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { Router } from '@angular/router'; 3 | import { AuthConstants } from './../../config/auth-constants'; 4 | import { AuthService } from './../../services/auth.service'; 5 | import { StorageService } from './../../services/storage.service'; 6 | import { ToastService } from './../../services/toast.service'; 7 | 8 | @Component({ 9 | selector: 'app-signup', 10 | templateUrl: './signup.page.html', 11 | styleUrls: ['./signup.page.scss'] 12 | }) 13 | export class SignupPage implements OnInit { 14 | postData = { 15 | name: '', 16 | username: '', 17 | email: '', 18 | password: '' 19 | }; 20 | 21 | constructor( 22 | private authService: AuthService, 23 | private toastService: ToastService, 24 | private storageService: StorageService, 25 | private router: Router 26 | ) {} 27 | 28 | ngOnInit() {} 29 | 30 | validateInputs() { 31 | let username = this.postData.username.trim(); 32 | let password = this.postData.password.trim(); 33 | let email = this.postData.email.trim(); 34 | let name = this.postData.name.trim(); 35 | return ( 36 | this.postData.name && 37 | this.postData.username && 38 | this.postData.password && 39 | this.postData.email && 40 | email.length > 0 && 41 | username.length > 0 && 42 | email.length > 0 && 43 | password.length > 0 44 | ); 45 | } 46 | 47 | signupAction() { 48 | if (this.validateInputs()) { 49 | this.authService.signup(this.postData).subscribe( 50 | (res: any) => { 51 | if (res.userData) { 52 | // Storing the User data. 53 | this.storageService 54 | .store(AuthConstants.AUTH, res.userData) 55 | .then(res => { 56 | this.router.navigate(['home']); 57 | }); 58 | } else { 59 | this.toastService.presentToast( 60 | 'Data alreay exists, please enter new details.' 61 | ); 62 | } 63 | }, 64 | (error: any) => { 65 | this.toastService.presentToast('Network Issue.'); 66 | } 67 | ); 68 | } else { 69 | this.toastService.presentToast( 70 | 'Please enter name, email, username or password.' 71 | ); 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/app/pages/welcome/welcome.module.ts: -------------------------------------------------------------------------------- 1 | import { CommonModule } from '@angular/common'; 2 | import { NgModule } from '@angular/core'; 3 | import { FormsModule } from '@angular/forms'; 4 | import { RouterModule, Routes } from '@angular/router'; 5 | import { IonicModule } from '@ionic/angular'; 6 | import { ComponentsModule } from './../../components/components.module'; 7 | import { WelcomePage } from './welcome.page'; 8 | 9 | const routes: Routes = [ 10 | { 11 | path: '', 12 | component: WelcomePage 13 | } 14 | ]; 15 | 16 | @NgModule({ 17 | imports: [ 18 | CommonModule, 19 | FormsModule, 20 | IonicModule, 21 | ComponentsModule, 22 | RouterModule.forChild(routes) 23 | ], 24 | declarations: [WelcomePage] 25 | }) 26 | export class WelcomePageModule {} 27 | -------------------------------------------------------------------------------- /src/app/pages/welcome/welcome.page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/app/pages/welcome/welcome.page.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/src/app/pages/welcome/welcome.page.scss -------------------------------------------------------------------------------- /src/app/pages/welcome/welcome.page.spec.ts: -------------------------------------------------------------------------------- 1 | import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 3 | 4 | import { WelcomePage } from './welcome.page'; 5 | 6 | describe('WelcomePage', () => { 7 | let component: WelcomePage; 8 | let fixture: ComponentFixture; 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [ WelcomePage ], 13 | schemas: [CUSTOM_ELEMENTS_SCHEMA], 14 | }) 15 | .compileComponents(); 16 | })); 17 | 18 | beforeEach(() => { 19 | fixture = TestBed.createComponent(WelcomePage); 20 | component = fixture.componentInstance; 21 | fixture.detectChanges(); 22 | }); 23 | 24 | it('should create', () => { 25 | expect(component).toBeTruthy(); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /src/app/pages/welcome/welcome.page.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-welcome', 5 | templateUrl: './welcome.page.html', 6 | styleUrls: ['./welcome.page.scss'], 7 | }) 8 | export class WelcomePage implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/resolvers/user-data.resolver.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { AuthService } from '../services/auth.service'; 3 | 4 | @Injectable({ 5 | providedIn: 'root' 6 | }) 7 | export class UserDataResolver { 8 | constructor(private authService: AuthService) {} 9 | 10 | resolve() { 11 | console.log('Hello'); 12 | return this.authService.getUserData(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/app/services/alert.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { AlertService } from './alert.service'; 4 | 5 | describe('AlertService', () => { 6 | beforeEach(() => TestBed.configureTestingModule({})); 7 | 8 | it('should be created', () => { 9 | const service: AlertService = TestBed.get(AlertService); 10 | expect(service).toBeTruthy(); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /src/app/services/alert.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { AlertController } from '@ionic/angular'; 3 | 4 | @Injectable({ 5 | providedIn: 'root' 6 | }) 7 | export class AlertService { 8 | constructor(public alertController: AlertController) {} 9 | 10 | async presentAlertConfirm(header: string, message: string) { 11 | let choice; 12 | const alert = await this.alertController.create({ 13 | header: header, 14 | message: message, 15 | buttons: [ 16 | { 17 | text: 'Cancel', 18 | role: 'cancel' 19 | }, 20 | { 21 | text: 'Okay', 22 | role: 'okay' 23 | } 24 | ] 25 | }); 26 | 27 | await alert.present(); 28 | await alert.onDidDismiss().then(data => { 29 | choice = data; 30 | }); 31 | return choice; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/app/services/auth.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { AuthService } from './auth.service'; 4 | 5 | describe('AuthService', () => { 6 | beforeEach(() => TestBed.configureTestingModule({})); 7 | 8 | it('should be created', () => { 9 | const service: AuthService = TestBed.get(AuthService); 10 | expect(service).toBeTruthy(); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /src/app/services/auth.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { Router } from '@angular/router'; 3 | import { BehaviorSubject, Observable } from 'rxjs'; 4 | import { AuthConstants } from './../config/auth-constants'; 5 | import { HttpService } from './http.service'; 6 | import { StorageService } from './storage.service'; 7 | 8 | @Injectable({ 9 | providedIn: 'root' 10 | }) 11 | export class AuthService { 12 | userData$ = new BehaviorSubject([]); 13 | 14 | constructor( 15 | private httpService: HttpService, 16 | private storageService: StorageService, 17 | private router: Router 18 | ) {} 19 | 20 | getUserData() { 21 | this.storageService.get(AuthConstants.AUTH).then(res => { 22 | this.userData$.next(res); 23 | }); 24 | } 25 | 26 | login(postData: any): Observable { 27 | return this.httpService.post('login', postData); 28 | } 29 | 30 | signup(postData: any): Observable { 31 | return this.httpService.post('signup', postData); 32 | } 33 | 34 | logout() { 35 | this.storageService.clear(); 36 | this.userData$.next(''); 37 | this.router.navigate(['']); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/app/services/feed.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { FeedService } from './feed.service'; 4 | 5 | describe('FeedService', () => { 6 | beforeEach(() => TestBed.configureTestingModule({})); 7 | 8 | it('should be created', () => { 9 | const service: FeedService = TestBed.get(FeedService); 10 | expect(service).toBeTruthy(); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /src/app/services/feed.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { BehaviorSubject, Observable } from 'rxjs'; 3 | import { HttpService } from './http.service'; 4 | 5 | @Injectable({ 6 | providedIn: 'root' 7 | }) 8 | export class FeedService { 9 | feedData$ = new BehaviorSubject([]); 10 | constructor(private httpService: HttpService) {} 11 | 12 | changeFeedData(data: any) { 13 | this.feedData$.next(data); 14 | } 15 | 16 | getCurrentFeedData() { 17 | return this.feedData$.getValue(); 18 | } 19 | 20 | updateFeedData(newFeed: any) { 21 | let data = []; 22 | data.push(newFeed); 23 | let currentFeedData = this.getCurrentFeedData(); 24 | let newFeedUpdateData = data.concat(currentFeedData); 25 | this.changeFeedData(newFeedUpdateData); 26 | } 27 | 28 | 29 | deleteFeedData(msgIndex: number) { 30 | let data = []; 31 | let currentFeedData = this.getCurrentFeedData(); 32 | currentFeedData.splice(msgIndex, 1); 33 | let newFeedUpdateData = data.concat(currentFeedData); 34 | this.changeFeedData(newFeedUpdateData); 35 | } 36 | 37 | feedData(postData: any): Observable { 38 | return this.httpService.post('feed', postData); 39 | } 40 | 41 | feedDelete(postData: any): Observable { 42 | return this.httpService.post('feedDelete', postData); 43 | } 44 | 45 | feedUpdate(postData: any): Observable { 46 | return this.httpService.post('feedUpdate', postData); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/app/services/http.service.ts: -------------------------------------------------------------------------------- 1 | import { HttpClient, HttpHeaders } from '@angular/common/http'; 2 | import { Injectable } from '@angular/core'; 3 | import { environment } from '../../environments/environment'; 4 | 5 | @Injectable({ 6 | providedIn: 'root' 7 | }) 8 | export class HttpService { 9 | headers = new HttpHeaders(); 10 | options = { headers: this.headers, withCredintials: false }; 11 | 12 | constructor(private http: HttpClient) {} 13 | 14 | post(serviceName: string, data: any) { 15 | const url = environment.apiUrl + serviceName; 16 | return this.http.post(url, JSON.stringify(data), this.options); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/app/services/storage.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { StorageService } from './storage.service'; 4 | 5 | describe('StorageService', () => { 6 | beforeEach(() => TestBed.configureTestingModule({})); 7 | 8 | it('should be created', () => { 9 | const service: StorageService = TestBed.get(StorageService); 10 | expect(service).toBeTruthy(); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /src/app/services/storage.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { Plugins } from '@capacitor/core'; 3 | const { Storage } = Plugins; 4 | @Injectable({ 5 | providedIn: 'root' 6 | }) 7 | export class StorageService { 8 | constructor() {} 9 | 10 | // Store the value 11 | async store(storageKey: string, value: any) { 12 | const encryptedValue = btoa(escape(JSON.stringify(value))); 13 | await Storage.set({ 14 | key: storageKey, 15 | value: encryptedValue 16 | }); 17 | } 18 | 19 | // Get the value 20 | async get(storageKey: string) { 21 | const ret = await Storage.get({ key: storageKey }); 22 | if (ret.value) { 23 | return JSON.parse(unescape(atob(ret.value))); 24 | } else { 25 | return false; 26 | } 27 | } 28 | 29 | // JSON "get" example 30 | async getObject() { 31 | const ret = await Storage.get({ key: 'user' }); 32 | const user = JSON.parse(ret.value); 33 | } 34 | 35 | async setItem() { 36 | await Storage.set({ 37 | key: 'name', 38 | value: 'Max' 39 | }); 40 | } 41 | 42 | async keys() { 43 | const keys = await Storage.keys(); 44 | console.log('Got keys: ', keys); 45 | } 46 | 47 | async clear() { 48 | await Storage.clear(); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/app/services/toast.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { ToastService } from './toast.service'; 4 | 5 | describe('ToastService', () => { 6 | beforeEach(() => TestBed.configureTestingModule({})); 7 | 8 | it('should be created', () => { 9 | const service: ToastService = TestBed.get(ToastService); 10 | expect(service).toBeTruthy(); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /src/app/services/toast.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { ToastController } from '@ionic/angular'; 3 | 4 | @Injectable({ 5 | providedIn: 'root' 6 | }) 7 | export class ToastService { 8 | constructor(public toastController: ToastController) {} 9 | 10 | async presentToast(infoMessage: string) { 11 | const toast = await this.toastController.create({ 12 | message: infoMessage, 13 | duration: 2000 14 | }); 15 | toast.present(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/assets/icon/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/src/assets/icon/favicon.png -------------------------------------------------------------------------------- /src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivastamada/new-ionic-angular/983f3ced724f0d90f3f133c94f3dd70c3aa802ba/src/assets/images/logo.png -------------------------------------------------------------------------------- /src/assets/shapes.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true, 3 | apiUrl: 'https://api.thewallscript.com/restful/' 4 | }; 5 | -------------------------------------------------------------------------------- /src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // This file can be replaced during build by using the `fileReplacements` array. 2 | // `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. 3 | // The list of file replacements can be found in `angular.json`. 4 | 5 | export const environment = { 6 | production: false, 7 | apiUrl: 'http://localhost:8084/' 8 | }; 9 | 10 | /* 11 | * For easier debugging in development mode, you can import the following file 12 | * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. 13 | * 14 | * This import should be commented out in production mode because it will have a negative impact 15 | * on performance if an error is thrown. 16 | */ 17 | // import 'zone.js/dist/zone-error'; // Included with Angular CLI. 18 | -------------------------------------------------------------------------------- /src/global.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * App Global CSS 3 | * ---------------------------------------------------------------------------- 4 | * Put style rules here that you want to apply globally. These styles are for 5 | * the entire app and not just one component. Additionally, this file can be 6 | * used as an entry point to import other CSS/Sass files to be included in the 7 | * output CSS. 8 | * For more information on global stylesheets, visit the documentation: 9 | * https://ionicframework.com/docs/layout/global-stylesheets 10 | */ 11 | 12 | /* Core CSS required for Ionic components to work properly */ 13 | @import "~@ionic/angular/css/core.css"; 14 | 15 | /* Basic CSS for apps built with Ionic */ 16 | @import "~@ionic/angular/css/normalize.css"; 17 | @import "~@ionic/angular/css/structure.css"; 18 | @import "~@ionic/angular/css/typography.css"; 19 | @import '~@ionic/angular/css/display.css'; 20 | 21 | /* Optional CSS utils that can be commented out */ 22 | @import "~@ionic/angular/css/padding.css"; 23 | @import "~@ionic/angular/css/float-elements.css"; 24 | @import "~@ionic/angular/css/text-alignment.css"; 25 | @import "~@ionic/angular/css/text-transformation.css"; 26 | @import "~@ionic/angular/css/flex-utils.css"; 27 | -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Ionic App 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | if (environment.production) { 8 | enableProdMode(); 9 | } 10 | 11 | platformBrowserDynamic().bootstrapModule(AppModule) 12 | .catch(err => console.log(err)); 13 | -------------------------------------------------------------------------------- /src/polyfills.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This file includes polyfills needed by Angular and is loaded before the app. 3 | * You can add your own extra polyfills to this file. 4 | * 5 | * This file is divided into 2 sections: 6 | * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. 7 | * 2. Application imports. Files imported after ZoneJS that should be loaded before your main 8 | * file. 9 | * 10 | * The current setup is for so-called "evergreen" browsers; the last versions of browsers that 11 | * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), 12 | * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. 13 | * 14 | * Learn more in https://angular.io/guide/browser-support 15 | */ 16 | 17 | /*************************************************************************************************** 18 | * BROWSER POLYFILLS 19 | */ 20 | 21 | /** IE10 and IE11 requires the following for NgClass support on SVG elements */ 22 | // import 'classlist.js'; // Run `npm install --save classlist.js`. 23 | 24 | /** 25 | * Web Animations `@angular/platform-browser/animations` 26 | * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. 27 | * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). 28 | */ 29 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`. 30 | 31 | /** 32 | * By default, zone.js will patch all possible macroTask and DomEvents 33 | * user can disable parts of macroTask/DomEvents patch by setting following flags 34 | * because those flags need to be set before `zone.js` being loaded, and webpack 35 | * will put import in the top of bundle, so user need to create a separate file 36 | * in this directory (for example: zone-flags.ts), and put the following flags 37 | * into that file, and then add the following code before importing zone.js. 38 | * import './zone-flags.ts'; 39 | * 40 | * The flags allowed in zone-flags.ts are listed here. 41 | * 42 | * The following flags will work for all browsers. 43 | * 44 | * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame 45 | * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick 46 | * (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames 47 | * 48 | * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js 49 | * with the following flag, it will bypass `zone.js` patch for IE/Edge 50 | * 51 | * (window as any).__Zone_enable_cross_context_check = true; 52 | * 53 | */ 54 | 55 | import './zone-flags.ts'; 56 | 57 | /*************************************************************************************************** 58 | * Zone JS is required by default for Angular itself. 59 | */ 60 | 61 | import 'zone.js/dist/zone'; // Included with Angular CLI. 62 | 63 | 64 | /*************************************************************************************************** 65 | * APPLICATION IMPORTS 66 | */ 67 | -------------------------------------------------------------------------------- /src/test.ts: -------------------------------------------------------------------------------- 1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 2 | 3 | import 'zone.js/dist/zone-testing'; 4 | import { getTestBed } from '@angular/core/testing'; 5 | import { 6 | BrowserDynamicTestingModule, 7 | platformBrowserDynamicTesting 8 | } from '@angular/platform-browser-dynamic/testing'; 9 | 10 | declare const require: any; 11 | 12 | // First, initialize the Angular testing environment. 13 | getTestBed().initTestEnvironment( 14 | BrowserDynamicTestingModule, 15 | platformBrowserDynamicTesting() 16 | ); 17 | // Then we find all the tests. 18 | const context = require.context('./', true, /\.spec\.ts$/); 19 | // And load the modules. 20 | context.keys().map(context); 21 | -------------------------------------------------------------------------------- /src/theme/variables.scss: -------------------------------------------------------------------------------- 1 | // Ionic Variables and Theming. For more info, please see: 2 | // http://ionicframework.com/docs/theming/ 3 | 4 | 5 | /** Ionic CSS Variables **/ 6 | :root { 7 | /** primary **/ 8 | --ion-color-primary: #3880ff; 9 | --ion-color-primary-rgb: 56, 128, 255; 10 | --ion-color-primary-contrast: #ffffff; 11 | --ion-color-primary-contrast-rgb: 255, 255, 255; 12 | --ion-color-primary-shade: #3171e0; 13 | --ion-color-primary-tint: #4c8dff; 14 | 15 | /** secondary **/ 16 | --ion-color-secondary: #0cd1e8; 17 | --ion-color-secondary-rgb: 12, 209, 232; 18 | --ion-color-secondary-contrast: #ffffff; 19 | --ion-color-secondary-contrast-rgb: 255, 255, 255; 20 | --ion-color-secondary-shade: #0bb8cc; 21 | --ion-color-secondary-tint: #24d6ea; 22 | 23 | /** tertiary **/ 24 | --ion-color-tertiary: #7044ff; 25 | --ion-color-tertiary-rgb: 112, 68, 255; 26 | --ion-color-tertiary-contrast: #ffffff; 27 | --ion-color-tertiary-contrast-rgb: 255, 255, 255; 28 | --ion-color-tertiary-shade: #633ce0; 29 | --ion-color-tertiary-tint: #7e57ff; 30 | 31 | /** success **/ 32 | --ion-color-success: #10dc60; 33 | --ion-color-success-rgb: 16, 220, 96; 34 | --ion-color-success-contrast: #ffffff; 35 | --ion-color-success-contrast-rgb: 255, 255, 255; 36 | --ion-color-success-shade: #0ec254; 37 | --ion-color-success-tint: #28e070; 38 | 39 | /** warning **/ 40 | --ion-color-warning: #ffce00; 41 | --ion-color-warning-rgb: 255, 206, 0; 42 | --ion-color-warning-contrast: #ffffff; 43 | --ion-color-warning-contrast-rgb: 255, 255, 255; 44 | --ion-color-warning-shade: #e0b500; 45 | --ion-color-warning-tint: #ffd31a; 46 | 47 | /** danger **/ 48 | --ion-color-danger: #f04141; 49 | --ion-color-danger-rgb: 245, 61, 61; 50 | --ion-color-danger-contrast: #ffffff; 51 | --ion-color-danger-contrast-rgb: 255, 255, 255; 52 | --ion-color-danger-shade: #d33939; 53 | --ion-color-danger-tint: #f25454; 54 | 55 | /** dark **/ 56 | --ion-color-dark: #222428; 57 | --ion-color-dark-rgb: 34, 34, 34; 58 | --ion-color-dark-contrast: #ffffff; 59 | --ion-color-dark-contrast-rgb: 255, 255, 255; 60 | --ion-color-dark-shade: #1e2023; 61 | --ion-color-dark-tint: #383a3e; 62 | 63 | /** medium **/ 64 | --ion-color-medium: #989aa2; 65 | --ion-color-medium-rgb: 152, 154, 162; 66 | --ion-color-medium-contrast: #ffffff; 67 | --ion-color-medium-contrast-rgb: 255, 255, 255; 68 | --ion-color-medium-shade: #86888f; 69 | --ion-color-medium-tint: #a2a4ab; 70 | 71 | /** light **/ 72 | --ion-color-light: #f4f5f8; 73 | --ion-color-light-rgb: 244, 244, 244; 74 | --ion-color-light-contrast: #000000; 75 | --ion-color-light-contrast-rgb: 0, 0, 0; 76 | --ion-color-light-shade: #d7d8da; 77 | --ion-color-light-tint: #f5f6f9; 78 | 79 | --ion-color-mango: #ffcc66; 80 | --ion-color-mango-rgb: 255,204,102; 81 | --ion-color-mango-contrast: #000000; 82 | --ion-color-mango-contrast-rgb: 0,0,0; 83 | --ion-color-mango-shade: #e0b45a; 84 | --ion-color-mango-tint: #ffd175; 85 | 86 | ion-tab-button.tab-selected { 87 | ion-icon, ion-label { 88 | color: var(--ion-color-mango) !important; 89 | --ion-color-base: var(--ion-color-mango) !important; 90 | } 91 | } 92 | } 93 | 94 | .ion-color-mango { 95 | --ion-color-base: var(--ion-color-mango); 96 | --ion-color-base-rgb: var(--ion-color-mango-rgb); 97 | --ion-color-contrast: var(--ion-color-mango-contrast); 98 | --ion-color-contrast-rgb: var(--ion-color-mango-contrast-rgb); 99 | --ion-color-shade: var(--ion-color-mango-shade); 100 | --ion-color-tint: var(--ion-color-mango-tint); 101 | } 102 | .smallLogo{ 103 | height: 50px; 104 | } 105 | .center{ 106 | text-align: center 107 | } 108 | -------------------------------------------------------------------------------- /src/zone-flags.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Prevents Angular change detection from 3 | * running with certain Web Component callbacks 4 | */ 5 | (window as any).__Zone_disable_customElements = true; 6 | -------------------------------------------------------------------------------- /tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "./out-tsc/app", 5 | "types": [] 6 | }, 7 | "include": [ 8 | "src/**/*.ts" 9 | ], 10 | "exclude": [ 11 | "src/test.ts", 12 | "src/**/*.spec.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist/out-tsc", 6 | "sourceMap": true, 7 | "declaration": false, 8 | "module": "esnext", 9 | "moduleResolution": "node", 10 | "emitDecoratorMetadata": true, 11 | "experimentalDecorators": true, 12 | "importHelpers": true, 13 | "target": "es2015", 14 | "typeRoots": [ 15 | "node_modules/@types" 16 | ], 17 | "lib": [ 18 | "es2018", 19 | "dom" 20 | ] 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "./out-tsc/spec", 5 | "types": [ 6 | "jasmine", 7 | "node" 8 | ] 9 | }, 10 | "files": [ 11 | "src/test.ts", 12 | "src/zone-flags.ts", 13 | "src/polyfills.ts" 14 | ], 15 | "include": [ 16 | "src/**/*.spec.ts", 17 | "src/**/*.d.ts" 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "tslint:recommended", 3 | "rulesDirectory": [ 4 | "codelyzer" 5 | ], 6 | "rules": { 7 | "array-type": false, 8 | "arrow-parens": false, 9 | "deprecation": { 10 | "severity": "warn" 11 | }, 12 | "import-blacklist": [ 13 | true, 14 | "rxjs/Rx" 15 | ], 16 | "interface-name": false, 17 | "max-classes-per-file": false, 18 | "max-line-length": [ 19 | true, 20 | 140 21 | ], 22 | "member-access": false, 23 | "member-ordering": [ 24 | true, 25 | { 26 | "order": [ 27 | "static-field", 28 | "instance-field", 29 | "static-method", 30 | "instance-method" 31 | ] 32 | } 33 | ], 34 | "no-consecutive-blank-lines": false, 35 | "no-console": [ 36 | true, 37 | "debug", 38 | "info", 39 | "time", 40 | "timeEnd", 41 | "trace" 42 | ], 43 | "no-empty": false, 44 | "no-inferrable-types": [ 45 | true, 46 | "ignore-params" 47 | ], 48 | "no-non-null-assertion": true, 49 | "no-redundant-jsdoc": true, 50 | "no-switch-case-fall-through": true, 51 | "no-use-before-declare": true, 52 | "no-var-requires": false, 53 | "object-literal-key-quotes": [ 54 | true, 55 | "as-needed" 56 | ], 57 | "object-literal-sort-keys": false, 58 | "ordered-imports": false, 59 | "quotemark": [ 60 | true, 61 | "single" 62 | ], 63 | "trailing-comma": false, 64 | "no-output-on-prefix": true, 65 | "no-inputs-metadata-property": true, 66 | "no-host-metadata-property": true, 67 | "no-input-rename": true, 68 | "no-output-rename": true, 69 | "use-lifecycle-interface": true, 70 | "use-pipe-transform-interface": true, 71 | "one-variable-per-declaration": false, 72 | "component-class-suffix": [true, "Page", "Component"], 73 | "directive-class-suffix": true, 74 | "directive-selector": [ 75 | true, 76 | "attribute", 77 | "app", 78 | "camelCase" 79 | ], 80 | "component-selector": [ 81 | true, 82 | "element", 83 | "app", 84 | "page", 85 | "kebab-case" 86 | ] 87 | } 88 | } 89 | --------------------------------------------------------------------------------