+  "cordova": {
77
+    "plugins": {
78
+      "cordova-plugin-whitelist": {},
79
+      "cordova-plugin-statusbar": {},
80
+      "cordova-plugin-device": {},
81
+      "cordova-plugin-splashscreen": {},
82
+      "cordova-plugin-ionic-webview": {},
83
+      "cordova-plugin-ionic-keyboard": {}
84
+    },
85
+    "platforms": [
86
+      "ios",
87
+      "android"
88
+    ]
89
+  }
90
+}

+ 8 - 0
resources/README.md

@@ -0,0 +1,8 @@
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/

BIN
resources/android/icon/drawable-hdpi-icon.png


BIN
resources/android/icon/drawable-ldpi-icon.png


BIN
resources/android/icon/drawable-mdpi-icon.png


BIN
resources/android/icon/drawable-xhdpi-icon.png


BIN
resources/android/icon/drawable-xxhdpi-icon.png


BIN
resources/android/icon/drawable-xxxhdpi-icon.png


BIN
resources/android/splash/drawable-land-hdpi-screen.png


BIN
resources/android/splash/drawable-land-ldpi-screen.png


BIN
resources/android/splash/drawable-land-mdpi-screen.png


BIN
resources/android/splash/drawable-land-xhdpi-screen.png


BIN
resources/android/splash/drawable-land-xxhdpi-screen.png


BIN
resources/android/splash/drawable-land-xxxhdpi-screen.png


BIN
resources/android/splash/drawable-port-hdpi-screen.png


BIN
resources/android/splash/drawable-port-ldpi-screen.png


BIN
resources/android/splash/drawable-port-mdpi-screen.png


BIN
resources/android/splash/drawable-port-xhdpi-screen.png


BIN
resources/android/splash/drawable-port-xxhdpi-screen.png


BIN
resources/android/splash/drawable-port-xxxhdpi-screen.png


+ 6 - 0
resources/android/xml/network_security_config.xml

@@ -0,0 +1,6 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<network-security-config>
3
+    <domain-config cleartextTrafficPermitted="true">
4
+        <domain includeSubdomains="true">localhost</domain>
5
+    </domain-config>
6
+</network-security-config>

BIN
resources/icon.png


BIN
resources/ios/icon/icon-1024.png


BIN
resources/ios/icon/icon-20.png


BIN
resources/ios/icon/icon-20@2x.png


BIN
resources/ios/icon/icon-20@3x.png


BIN
resources/ios/icon/icon-24@2x.png


BIN
resources/ios/icon/icon-27.5@2x.png


BIN
resources/ios/icon/icon-29.png


BIN
resources/ios/icon/icon-29@2x.png


BIN
resources/ios/icon/icon-29@3x.png


BIN
resources/ios/icon/icon-40.png


BIN
resources/ios/icon/icon-40@2x.png


BIN
resources/ios/icon/icon-40@3x.png


BIN
resources/ios/icon/icon-44@2x.png


BIN
resources/ios/icon/icon-50.png


BIN
resources/ios/icon/icon-50@2x.png


BIN
resources/ios/icon/icon-60.png


BIN
resources/ios/icon/icon-60@2x.png


BIN
resources/ios/icon/icon-60@3x.png


BIN
resources/ios/icon/icon-72.png


BIN
resources/ios/icon/icon-72@2x.png


BIN
resources/ios/icon/icon-76.png


BIN
resources/ios/icon/icon-76@2x.png


BIN
resources/ios/icon/icon-83.5@2x.png


BIN
resources/ios/icon/icon-86@2x.png


BIN
resources/ios/icon/icon-98@2x.png


BIN
resources/ios/icon/icon-small.png


BIN
resources/ios/icon/icon-small@2x.png


BIN
resources/ios/icon/icon-small@3x.png


BIN
resources/ios/icon/icon.png


BIN
resources/ios/icon/icon@2x.png


BIN
resources/ios/splash/Default-2436h.png


BIN
resources/ios/splash/Default-568h@2x~iphone.png


BIN
resources/ios/splash/Default-667h.png


BIN
resources/ios/splash/Default-736h.png


BIN
resources/ios/splash/Default-Landscape-2436h.png


BIN
resources/ios/splash/Default-Landscape-736h.png


BIN
resources/ios/splash/Default-Landscape@2x~ipad.png


BIN
resources/ios/splash/Default-Landscape@~ipadpro.png


BIN
resources/ios/splash/Default-Landscape~ipad.png


BIN
resources/ios/splash/Default-Portrait@2x~ipad.png


BIN
resources/ios/splash/Default-Portrait@~ipadpro.png


BIN
resources/ios/splash/Default-Portrait~ipad.png


BIN
resources/ios/splash/Default@2x~iphone.png


BIN
resources/ios/splash/Default@2x~universal~anyany.png


BIN
resources/ios/splash/Default~iphone.png


BIN
resources/splash.png


+ 40 - 0
src/app/app-routing.module.ts

@@ -5,6 +5,46 @@ const routes: Routes = [
5 5
   {
6 6
     path: '',
7 7
     loadChildren: () => import('./tabs/tabs.module').then(m => m.TabsPageModule)
8
+  },
9
+  {
10
+    path: 'home',
11
+    loadChildren: () => import('./home/home.module').then( m => m.HomePageModule)
12
+  },
13
+  {
14
+    path: 'register',
15
+    loadChildren: () => import('./register/register.module').then( m => m.RegisterPageModule)
16
+  },
17
+  {
18
+    path: 'login',
19
+    loadChildren: () => import('./login/login.module').then( m => m.LoginPageModule)
20
+  },
21
+  {
22
+    path: 'forgot-password',
23
+    loadChildren: () => import('./forgot-password/forgot-password.module').then( m => m.ForgotPasswordPageModule)
24
+  },
25
+  {
26
+    path: 'register-form',
27
+    loadChildren: () => import('./register-form/register-form.module').then( m => m.RegisterFormPageModule)
28
+  },
29
+  {
30
+    path: 'profile',
31
+    loadChildren: () => import('./profile/profile.module').then( m => m.ProfilePageModule)
32
+  },
33
+  {
34
+    path: 'reset-password',
35
+    loadChildren: () => import('./reset-password/reset-password.module').then( m => m.ResetPasswordPageModule)
36
+  },
37
+  {
38
+    path: 'placedetail',
39
+    loadChildren: () => import('./placedetail/placedetail.module').then( m => m.PlacedetailPageModule)
40
+  },
41
+  {
42
+    path: 'place',
43
+    loadChildren: () => import('./place/place.module').then( m => m.PlacePageModule)
44
+  },
45
+  {
46
+    path: 'province',
47
+    loadChildren: () => import('./province/province.module').then( m => m.ProvincePageModule)
8 48
   }
9 49
 ];
10 50
 @NgModule({

+ 18 - 2
src/app/app.module.ts

@@ -7,11 +7,27 @@ import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
7 7
 import { AppRoutingModule } from './app-routing.module';
8 8
 import { AppComponent } from './app.component';
9 9
 
10
+import { HttpClientModule, HttpClient} from '@angular/common/http';
11
+
12
+// import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
13
+// import { library } from '@fortawesome/fontawesome-svg-core';
14
+import { FontAwesomeModule, FaIconLibrary } from '@fortawesome/angular-fontawesome';
15
+import { fas } from '@fortawesome/free-solid-svg-icons';
16
+import { far } from '@fortawesome/free-regular-svg-icons';
17
+import { fab } from '@fortawesome/free-brands-svg-icons';
18
+
19
+// library.add(fas,far,fab);
20
+
10 21
 @NgModule({
11 22
   declarations: [AppComponent],
12 23
   entryComponents: [],
13
-  imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule],
24
+  imports: [HttpClientModule, BrowserModule, IonicModule.forRoot(), AppRoutingModule, FontAwesomeModule],
14 25
   providers: [{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }],
15 26
   bootstrap: [AppComponent],
16 27
 })
17
-export class AppModule {}
28
+export class AppModule {
29
+constructor(library: FaIconLibrary) {
30
+  library.addIconPacks(fas, fab, far);
31
+}
32
+
33
+}

+ 3 - 1
src/app/explore-container/explore-container.component.html

@@ -1,4 +1,6 @@
1 1
 <div id="container">
2 2
   <strong>{{ name }}</strong>
3 3
   <p>Explore <a target="_blank" rel="noopener noreferrer" href="https://ionicframework.com/docs/components">UI Components</a></p>
4
-</div>
4
+</div>
5
+<ion-title size="large">wellnessroute.info</ion-title>
6
+  <ion-title size="large">แผนที่สุขภาพ</ion-title>

+ 17 - 0
src/app/forgot-password/forgot-password-routing.module.ts

@@ -0,0 +1,17 @@
1
+import { NgModule } from '@angular/core';
2
+import { Routes, RouterModule } from '@angular/router';
3
+
4
+import { ForgotPasswordPage } from './forgot-password.page';
5
+
6
+const routes: Routes = [
7
+  {
8
+    path: '',
9
+    component: ForgotPasswordPage
10
+  }
11
+];
12
+
13
+@NgModule({
14
+  imports: [RouterModule.forChild(routes)],
15
+  exports: [RouterModule],
16
+})
17
+export class ForgotPasswordPageRoutingModule {}

+ 20 - 0
src/app/forgot-password/forgot-password.module.ts

@@ -0,0 +1,20 @@
1
+import { NgModule } from '@angular/core';
2
+import { CommonModule } from '@angular/common';
3
+import { FormsModule } from '@angular/forms';
4
+
5
+import { IonicModule } from '@ionic/angular';
6
+
7
+import { ForgotPasswordPageRoutingModule } from './forgot-password-routing.module';
8
+
9
+import { ForgotPasswordPage } from './forgot-password.page';
10
+
11
+@NgModule({
12
+  imports: [
13
+    CommonModule,
14
+    FormsModule,
15
+    IonicModule,
16
+    ForgotPasswordPageRoutingModule
17
+  ],
18
+  declarations: [ForgotPasswordPage]
19
+})
20
+export class ForgotPasswordPageModule {}

+ 31 - 0
src/app/forgot-password/forgot-password.page.html

@@ -0,0 +1,31 @@
1
+<ion-header>
2
+  <ion-toolbar>
3
+    <ion-title>Wellness Route</ion-title>
4
+  </ion-toolbar>
5
+</ion-header>
6
+
7
+<ion-content>
8
+  <ion-row>
9
+    <ion-col>
10
+      <div class="ion-text-center">
11
+        <h1>ลืมรหัสผ่าน</h1>
12
+      </div>
13
+    </ion-col>
14
+  </ion-row>
15
+  <form>
16
+    <ion-row>
17
+      <ion-col>
18
+        <ion-item lines="full">
19
+          <ion-label position="floating">อีเมล์</ion-label>
20
+          <ion-input type="email" name="email" [(ngModel)]="email" inputmode="email"></ion-input>
21
+        </ion-item>
22
+      </ion-col>
23
+    </ion-row>
24
+    <ion-row>
25
+      <ion-col>
26
+        <ion-button type="submit" color="danger" expand="block" (click)="resetPassword()">ส่งรหัสผ่าน</ion-button>
27
+
28
+      </ion-col>
29
+    </ion-row>
30
+  </form>
31
+</ion-content>

+ 0 - 0
src/app/forgot-password/forgot-password.page.scss


+ 24 - 0
src/app/forgot-password/forgot-password.page.spec.ts

@@ -0,0 +1,24 @@
1
+import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
2
+import { IonicModule } from '@ionic/angular';
3
+
4
+import { ForgotPasswordPage } from './forgot-password.page';
5
+
6
+describe('ForgotPasswordPage', () => {
7
+  let component: ForgotPasswordPage;
8
+  let fixture: ComponentFixture<ForgotPasswordPage>;
9
+
10
+  beforeEach(waitForAsync(() => {
11
+    TestBed.configureTestingModule({
12
+      declarations: [ ForgotPasswordPage ],
13
+      imports: [IonicModule.forRoot()]
14
+    }).compileComponents();
15
+
16
+    fixture = TestBed.createComponent(ForgotPasswordPage);
17
+    component = fixture.componentInstance;
18
+    fixture.detectChanges();
19
+  }));
20
+
21
+  it('should create', () => {
22
+    expect(component).toBeTruthy();
23
+  });
24
+});

+ 17 - 0
src/app/forgot-password/forgot-password.page.ts

@@ -0,0 +1,17 @@
1
+import { Component, OnInit } from '@angular/core';
2
+
3
+@Component({
4
+  selector: 'app-forgot-password',
5
+  templateUrl: './forgot-password.page.html',
6
+  styleUrls: ['./forgot-password.page.scss'],
7
+})
8
+export class ForgotPasswordPage implements OnInit {
9
+
10
+  email = "";
11
+
12
+  constructor() { }
13
+
14
+  ngOnInit() {
15
+  }
16
+
17
+}

+ 17 - 0
src/app/home/home-routing.module.ts

@@ -0,0 +1,17 @@
1
+import { NgModule } from '@angular/core';
2
+import { Routes, RouterModule } from '@angular/router';
3
+
4
+import { HomePage } from './home.page';
5
+
6
+const routes: Routes = [
7
+  {
8
+    path: '',
9
+    component: HomePage
10
+  }
11
+];
12
+
13
+@NgModule({
14
+  imports: [RouterModule.forChild(routes)],
15
+  exports: [RouterModule],
16
+})
17
+export class HomePageRoutingModule {}

+ 23 - 0
src/app/home/home.module.ts

@@ -0,0 +1,23 @@
1
+import { NgModule } from '@angular/core';
2
+import { CommonModule } from '@angular/common';
3
+import { FormsModule } from '@angular/forms';
4
+
5
+import { IonicModule } from '@ionic/angular';
6
+
7
+import { HomePageRoutingModule } from './home-routing.module';
8
+
9
+import { HomePage } from './home.page';
10
+import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
11
+import { IonSlides } from '@ionic/angular';
12
+
13
+@NgModule({
14
+  imports: [
15
+    CommonModule,
16
+    FormsModule,
17
+    IonicModule,
18
+    HomePageRoutingModule,
19
+    FontAwesomeModule
20
+  ],
21
+  declarations: [HomePage]
22
+})
23
+export class HomePageModule {}

+ 87 - 0
src/app/home/home.page.html

@@ -0,0 +1,87 @@
1
+<ion-header class="ion-no-border">
2
+  <ion-toolbar class="new-background-color">
3
+    <ion-title>Wellness Route</ion-title>
4
+  </ion-toolbar>
5
+</ion-header>
6
+<ion-content [fullscreen]="true">
7
+  <ion-slides pager="true" [options]="slideOptsOne">
8
+    <ion-slide *ngFor="let p of imageslide">
9
+      <div class="slide">
10
+        <ion-img [src]="p.better_featured_image.source_url"></ion-img>
11
+      </div>
12
+    </ion-slide>
13
+  </ion-slides>
14
+  <ion-grid>
15
+    <ion-row>
16
+      <ion-col>
17
+        <ion-toolbar class="search">
18
+          <ion-searchbar placeholder="ค้นหา"></ion-searchbar>
19
+        </ion-toolbar>
20
+      </ion-col>
21
+    </ion-row>
22
+    <ion-row class="ion-justify-content-start">
23
+      <!-- <ion-col size="6">
24
+        <div class="center catshow">
25
+          <fa-icon [icon]="['fas', 'utensils']" size="3x" class="red"></fa-icon>
26
+        </div>
27
+      </ion-col>
28
+      <ion-col size="6">
29
+        <div class=" catshow center">
30
+          <fa-icon [icon]="['fas', 'spa']" size="3x"></fa-icon>        
31
+        </div>
32
+      </ion-col>
33
+      <ion-col size="6">
34
+        <div class=" catshow center">
35
+          <fa-icon [icon]="['fas', 'praying-hands']" size="3x"></fa-icon>          
36
+        </div>
37
+      </ion-col>
38
+      <ion-col size="6">
39
+        <div class="catshow center">
40
+          <fa-icon [icon]="['fas', 'running']" size="3x"></fa-icon>
41
+        </div>
42
+      </ion-col> -->
43
+      <ion-col size="3">
44
+        <div class="center catshow">
45
+          <a [routerLink]="['/tabs/place/']"><fa-icon [icon]="['fas', 'utensils']" size="2x" class="red"></fa-icon></a>          
46
+        </div>
47
+      </ion-col>
48
+      <ion-col size="3">
49
+        <div class=" catshow center">
50
+          <fa-icon [icon]="['fas', 'spa']" size="2x"></fa-icon>        
51
+        </div>
52
+      </ion-col>
53
+      <ion-col size="3">
54
+        <div class=" catshow center">
55
+          <fa-icon [icon]="['fas', 'praying-hands']" size="2x"></fa-icon>          
56
+        </div>
57
+      </ion-col>
58
+      <ion-col size="3">
59
+        <div class="catshow center">
60
+          <fa-icon [icon]="['fas', 'running']" size="2x"></fa-icon>
61
+        </div>
62
+      </ion-col>
63
+    </ion-row>
64
+    <ion-row>
65
+      <ion-col>
66
+        <ion-card *ngFor="let pldata of placelasted">
67
+          <div *ngIf="$any(pldata).better_featured_image != null">
68
+            <img src="{{$any(pldata).better_featured_image.source_url}}" alt="">
69
+          </div>
70
+          <div *ngIf="$any(pldata).better_featured_image == null">
71
+            <img src="/assets/images/temp.png" />
72
+          </div>
73
+          <ion-card-header>            
74
+            <a [routerLink]="['/tabs/place/', pldata.id]"><ion-card-title [innerHTML]="pldata.title.rendered"></ion-card-title>
75
+            </a>
76
+            <a [routerLink]="['/tabs/province/']">
77
+              <span [innerHTML]="pldata._embedded['wp:term'][1][0].name"></span>
78
+            </a> /
79
+            <a [routerLink]="['/tabs/place/']">
80
+              <span [innerHTML]="pldata._embedded['wp:term'][2][0].name"></span>
81
+            </a>
82
+          </ion-card-header>
83
+        </ion-card>
84
+      </ion-col>
85
+    </ion-row>
86
+  </ion-grid>
87
+</ion-content>

+ 45 - 0
src/app/home/home.page.scss

@@ -0,0 +1,45 @@
1
+ion-card-title {
2
+  font-family: "IBM Plex Sans Thai", sans-serif !important;
3
+  font-weight: 600;
4
+  font-size: 20px;
5
+}
6
+
7
+ion-searchbar{
8
+  // --color:#000;
9
+  // --placeholder-color:#000;
10
+  // --background:#000;
11
+}
12
+
13
+.search{
14
+  padding: 0px !important;
15
+  // margin-bottom: 30px;
16
+  margin-top: 10px;
17
+}
18
+
19
+// .red {
20
+//   color: rgb(255, 0, 0);
21
+// }
22
+
23
+.catshow {
24
+  height: 100px;
25
+  // background-color: rgb(183, 210, 236);
26
+  border: solid 1px;
27
+  border-color: cornflowerblue;
28
+}
29
+
30
+.center {
31
+  // // height: 110px;
32
+  // margin: auto;
33
+  // // width: 50%;
34
+  // border: 3px solid green;
35
+  // padding: 10px;
36
+  // display: block;
37
+  // margin-left: auto;
38
+  // margin-right: auto;
39
+  display: flex;
40
+  // height: 180px;
41
+  // background-color: #ff1124;
42
+  justify-content: center;
43
+  align-items: center;
44
+  // flex-wrap: wrap;
45
+}

+ 24 - 0
src/app/home/home.page.spec.ts

@@ -0,0 +1,24 @@
1
+import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
2
+import { IonicModule } from '@ionic/angular';
3
+
4
+import { HomePage } from './home.page';
5
+
6
+describe('HomePage', () => {
7
+  let component: HomePage;
8
+  let fixture: ComponentFixture<HomePage>;
9
+
10
+  beforeEach(waitForAsync(() => {
11
+    TestBed.configureTestingModule({
12
+      declarations: [ HomePage ],
13
+      imports: [IonicModule.forRoot()]
14
+    }).compileComponents();
15
+
16
+    fixture = TestBed.createComponent(HomePage);
17
+    component = fixture.componentInstance;
18
+    fixture.detectChanges();
19
+  }));
20
+
21
+  it('should create', () => {
22
+    expect(component).toBeTruthy();
23
+  });
24
+});

+ 39 - 0
src/app/home/home.page.ts

@@ -0,0 +1,39 @@
1
+import { Component, OnInit } from '@angular/core';
2
+import { NavController } from '@ionic/angular';
3
+import { WpServiceService } from '../wp-service.service';
4
+
5
+
6
+@Component({
7
+  selector: 'app-home',
8
+  templateUrl: './home.page.html',
9
+  styleUrls: ['./home.page.scss'],
10
+})
11
+export class HomePage implements OnInit {
12
+
13
+  imageslide :any = [];
14
+  placelasted :any = [];
15
+  sliderOne: any;
16
+
17
+  slideOptsOne = {
18
+    initialSlide: 0,
19
+    slidesPerView: 1,
20
+    autoplay: true
21
+  };
22
+
23
+  constructor(public navCtrl: NavController, private wpservice: WpServiceService) { }
24
+
25
+  ngOnInit() {
26
+    
27
+    this.wpservice.getSlideshow().subscribe((data) => {
28
+      this.imageslide = data;
29
+      console.log('load imageslide');
30
+    });
31
+
32
+    this.wpservice.getLasted().subscribe((placedata) => {
33
+      this.placelasted = placedata;
34
+      console.log('load Place');
35
+      console.log(placedata);
36
+    });        
37
+  }
38
+
39
+}

+ 17 - 0
src/app/login/login-routing.module.ts

@@ -0,0 +1,17 @@
1
+import { NgModule } from '@angular/core';
2
+import { Routes, RouterModule } from '@angular/router';
3
+
4
+import { LoginPage } from './login.page';
5
+
6
+const routes: Routes = [
7
+  {
8
+    path: '',
9
+    component: LoginPage
10
+  }
11
+];
12
+
13
+@NgModule({
14
+  imports: [RouterModule.forChild(routes)],
15
+  exports: [RouterModule],
16
+})
17
+export class LoginPageRoutingModule {}

+ 20 - 0
src/app/login/login.module.ts

@@ -0,0 +1,20 @@
1
+import { NgModule } from '@angular/core';
2
+import { CommonModule } from '@angular/common';
3
+import { FormsModule } from '@angular/forms';
4
+
5
+import { IonicModule } from '@ionic/angular';
6
+
7
+import { LoginPageRoutingModule } from './login-routing.module';
8
+
9
+import { LoginPage } from './login.page';
10
+
11
+@NgModule({
12
+  imports: [
13
+    CommonModule,
14
+    FormsModule,
15
+    IonicModule,
16
+    LoginPageRoutingModule
17
+  ],
18
+  declarations: [LoginPage]
19
+})
20
+export class LoginPageModule {}

+ 78 - 0
src/app/login/login.page.html

@@ -0,0 +1,78 @@
1
+<ion-header>
2
+  <ion-toolbar>
3
+    <ion-title>Wellness Route</ion-title>
4
+  </ion-toolbar>
5
+</ion-header>
6
+
7
+<ion-content>
8
+  <ion-row>
9
+    <ion-col>
10
+      <div class="ion-text-center">
11
+        <h1>เข้าสู่ระบบ</h1>
12
+      </div>
13
+    </ion-col>
14
+  </ion-row>
15
+  <ion-row>
16
+    <ion-col>
17
+      <form>
18
+        <ion-item lines="full">
19
+          <ion-label position="floating">อีเมล์</ion-label>
20
+          <ion-input type="text" required="true" [(ngModel)]='registerForm.email' name='email' type='email'></ion-input>
21
+        </ion-item>
22
+
23
+        <ion-item lines="full">
24
+          <ion-label position="floating">รหัสผ่าน</ion-label>
25
+          <ion-input type="password" required [(ngModel)]='registerForm.password' name='password'></ion-input>
26
+        </ion-item>
27
+      </form>
28
+    </ion-col>
29
+  </ion-row>
30
+  <ion-row>
31
+    <ion-col>
32
+      <ion-button type="submit" color="success" expand="block" (click)="userLogin()">Login</ion-button>
33
+    </ion-col>
34
+  </ion-row>
35
+  <ion-row>
36
+    <ion-col class='ion-text-center'>
37
+      <a (click)="openForgotPassword()" class="small-text">ลืมรหัส</a>      
38
+    </ion-col>
39
+    <ion-col class='ion-text-center'>
40
+      <a (click)="openRegister()" class="small-text">สม้ครใหม่</a>
41
+    </ion-col>
42
+  </ion-row>
43
+  <ion-row>
44
+    <ion-col>
45
+      <span class="divider line one-line">หรือ</span>
46
+    </ion-col>
47
+  </ion-row>
48
+  <ion-row>
49
+    <ion-col>
50
+      <ion-button class="log-fb-in-button" expand="block" (click)="doFbLogin()">
51
+        Log in with Facebook
52
+      </ion-button><br>
53
+      <button (click)="appleSignIn()" block [hidden]="isAndroid">
54
+        <img src="assets/images/appleid_button@2x.png">
55
+      </button>
56
+    </ion-col>
57
+  </ion-row>
58
+  <ion-col>      
59
+    <a [routerLink]="['/tabs/forgot-password']">
60
+      page ลืมรหัส
61
+    </a>
62
+  </ion-col>
63
+  <ion-col>      
64
+    <a [routerLink]="['/tabs/register']">
65
+      page register or signin
66
+    </a>
67
+  </ion-col>
68
+  <ion-col>      
69
+    <a [routerLink]="['/tabs/reset-password']">
70
+      page reset password
71
+    </a>
72
+  </ion-col>
73
+  <ion-col>      
74
+    <a [routerLink]="['/tabs/profile']">
75
+      page profile
76
+    </a>
77
+  </ion-col>
78
+</ion-content>

+ 26 - 0
src/app/login/login.page.scss

@@ -0,0 +1,26 @@
1
+
2
+.divider {
3
+    display: flex;
4
+  
5
+    &:before,
6
+    &:after {
7
+      content: "";
8
+      flex: 1;
9
+    }
10
+  }
11
+  .line {
12
+    align-items: center;
13
+    margin: 1em -1em;
14
+    color: #5f5e5e;
15
+    &:before,
16
+    &:after {
17
+      height: 1px;
18
+      margin: 0 1em;
19
+    }
20
+  }
21
+  .one-line {
22
+    &:before,
23
+    &:after {
24
+      background: #5f5e5e;
25
+    }
26
+  }

+ 24 - 0
src/app/login/login.page.spec.ts

@@ -0,0 +1,24 @@
1
+import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
2
+import { IonicModule } from '@ionic/angular';
3
+
4
+import { LoginPage } from './login.page';
5
+
6
+describe('LoginPage', () => {
7
+  let component: LoginPage;
8
+  let fixture: ComponentFixture<LoginPage>;
9
+
10
+  beforeEach(waitForAsync(() => {
11
+    TestBed.configureTestingModule({
12
+      declarations: [ LoginPage ],
13
+      imports: [IonicModule.forRoot()]
14
+    }).compileComponents();
15
+
16
+    fixture = TestBed.createComponent(LoginPage);
17
+    component = fixture.componentInstance;
18
+    fixture.detectChanges();
19
+  }));
20
+
21
+  it('should create', () => {
22
+    expect(component).toBeTruthy();
23
+  });
24
+});

+ 18 - 0
src/app/login/login.page.ts

@@ -0,0 +1,18 @@
1
+import { Component, OnInit } from '@angular/core';
2
+
3
+@Component({
4
+  selector: 'app-login',
5
+  templateUrl: './login.page.html',
6
+  styleUrls: ['./login.page.scss'],
7
+})
8
+export class LoginPage implements OnInit {
9
+
10
+  registerForm = { email: "", password: "" };
11
+  isAndroid = false;
12
+
13
+  constructor() { }
14
+
15
+  ngOnInit() {
16
+  }
17
+
18
+}

+ 17 - 0
src/app/place/place-routing.module.ts

@@ -0,0 +1,17 @@
1
+import { NgModule } from '@angular/core';
2
+import { Routes, RouterModule } from '@angular/router';
3
+
4
+import { PlacePage } from './place.page';
5
+
6
+const routes: Routes = [
7
+  {
8
+    path: '',
9
+    component: PlacePage
10
+  }
11
+];
12
+
13
+@NgModule({
14
+  imports: [RouterModule.forChild(routes)],
15
+  exports: [RouterModule],
16
+})
17
+export class PlacePageRoutingModule {}

+ 20 - 0
src/app/place/place.module.ts

@@ -0,0 +1,20 @@
1
+import { NgModule } from '@angular/core';
2
+import { CommonModule } from '@angular/common';
3
+import { FormsModule } from '@angular/forms';
4
+
5
+import { IonicModule } from '@ionic/angular';
6
+
7
+import { PlacePageRoutingModule } from './place-routing.module';
8
+
9
+import { PlacePage } from './place.page';
10
+
11
+@NgModule({
12
+  imports: [
13
+    CommonModule,
14
+    FormsModule,
15
+    IonicModule,
16
+    PlacePageRoutingModule
17
+  ],
18
+  declarations: [PlacePage]
19
+})
20
+export class PlacePageModule {}

+ 29 - 0
src/app/place/place.page.html

@@ -0,0 +1,29 @@
1
+<ion-header>
2
+  <ion-toolbar class="new-background-color">
3
+    <ion-title>Wellness Route</ion-title>
4
+  </ion-toolbar>
5
+</ion-header>
6
+
7
+<ion-content>
8
+  <img src="/assets/images/golf-bg.jpg">
9
+  <div class="holidaycard">
10
+    <ion-grid>
11
+      <ion-row>
12
+        <ion-col size="12">
13
+          <div class="txt-place-title">Place Category Name</div>
14
+        </ion-col>
15
+      </ion-row>
16
+      <ion-card *ngFor="let pcl of placecatlist">
17
+        <div *ngIf="$any(pcl).better_featured_image != null">
18
+          <img src="{{$any(pcl).better_featured_image.source_url}}" alt="">
19
+        </div>
20
+        <div *ngIf="$any(pcl).better_featured_image == null">
21
+          <img src="/assets/images/temp.png" />
22
+        </div>
23
+        <ion-card-header>
24
+           <a [routerLink]="['/tabs/place/', pcl.id]"><ion-card-title [innerHTML]="pcl.title.rendered"></ion-card-title></a>
25
+        </ion-card-header>
26
+      </ion-card>
27
+    </ion-grid>
28
+  </div>
29
+</ion-content>

+ 18 - 0
src/app/place/place.page.scss

@@ -0,0 +1,18 @@
1
+.holidaycard {
2
+    position: absolute;
3
+    left: 0px;
4
+    // bottom: 0px;
5
+    top:200px;
6
+    min-height: 48%;
7
+    width: 100%;
8
+    padding: 5px;
9
+    border-radius: 15px ;
10
+    background: white;
11
+    --background: white;
12
+  }
13
+  
14
+  ion-card-title {
15
+    font-family: "IBM Plex Sans Thai", sans-serif !important;
16
+    font-weight: 600;
17
+    font-size: 20px;
18
+  }

+ 24 - 0
src/app/place/place.page.spec.ts

@@ -0,0 +1,24 @@
1
+import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
2
+import { IonicModule } from '@ionic/angular';
3
+
4
+import { PlacePage } from './place.page';
5
+
6
+describe('PlacePage', () => {
7
+  let component: PlacePage;
8
+  let fixture: ComponentFixture<PlacePage>;
9
+
10
+  beforeEach(waitForAsync(() => {
11
+    TestBed.configureTestingModule({
12
+      declarations: [ PlacePage ],
13
+      imports: [IonicModule.forRoot()]
14
+    }).compileComponents();
15
+
16
+    fixture = TestBed.createComponent(PlacePage);
17
+    component = fixture.componentInstance;
18
+    fixture.detectChanges();
19
+  }));
20
+
21
+  it('should create', () => {
22
+    expect(component).toBeTruthy();
23
+  });
24
+});

+ 31 - 0
src/app/place/place.page.ts

@@ -0,0 +1,31 @@
1
+import { Component, OnInit, Input } from '@angular/core';
2
+import { ActivatedRoute, Router } from '@angular/router';
3
+import { WpServiceService } from '../wp-service.service';
4
+
5
+@Component({
6
+  selector: 'app-place',
7
+  templateUrl: './place.page.html',
8
+  styleUrls: ['./place.page.scss'],
9
+})
10
+export class PlacePage implements OnInit {
11
+
12
+  data: any;
13
+  placecatlist: any;
14
+
15
+  constructor(private wpservice: WpServiceService, private route: ActivatedRoute, private router: Router) { }
16
+
17
+  @Input() id: string;
18
+
19
+  ngOnInit() {
20
+    let id = this.route.snapshot.paramMap.get('id') || this.id;
21
+    console.log("fetching ...");
22
+    this.wpservice.getPlaceCat().subscribe((data) => {
23
+      this.placecatlist = data;      
24
+      console.log("load Cat Place ...");
25
+      console.log(data);
26
+    }, error => {
27
+      console.log("errror ", error);
28
+    });
29
+  }
30
+
31
+}

+ 17 - 0
src/app/placedetail/placedetail-routing.module.ts

@@ -0,0 +1,17 @@
1
+import { NgModule } from '@angular/core';
2
+import { Routes, RouterModule } from '@angular/router';
3
+
4
+import { PlacedetailPage } from './placedetail.page';
5
+
6
+const routes: Routes = [
7
+  {
8
+    path: '',
9
+    component: PlacedetailPage
10
+  }
11
+];
12
+
13
+@NgModule({
14
+  imports: [RouterModule.forChild(routes)],
15
+  exports: [RouterModule],
16
+})
17
+export class PlacedetailPageRoutingModule {}

+ 0 - 0
src/app/placedetail/placedetail.module.ts


Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels

tum/soc - Gogs: Simplico Git Service

Няма описание

virustotal_v3.openapi.json 30KB

1
  1. {"body":"{\"basePath\":\"/api/v3\",\"components\":{\"securitySchemes\":{\"ApiKeyAuth\":{\"in\":\"header\",\"name\":\"x-apikey\",\"type\":\"apiKey\"}}},\"editing\":true,\"host\":\"www.virustotal.com\",\"id\":\"7ea4a8ac1dbc114c3f67e1e47dd87cc4\",\"info\":{\"contact\":{\"email\":\"support@shuffler.io\",\"name\":\"@Anonymous Shuffle User\",\"url\":\"https://twitter.com/shuffleio\"},\"title\":\"Virustotal v3\",\"version\":\"1.0\",\"x-categories\":[\"Intel\"],\"x-logo\":\"data:image/png;base64,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\"},\"openapi\":\"3.0.0\",\"paths\":{\"/domains/{domain}\":{\"get\":{\"operationId\":\"Get_a_domain_report\",\"parameters\":[{\"description\":\"Generated by shuffler.io OpenAPI\",\"in\":\"path\",\"name\":\"domain\",\"required\":true,\"schema\":{\"type\":\"string\"}}],\"requestBody\":{},\"responses\":{\"default\":{\"content\":{\"text/plain\":{\"schema\":{\"example\":\"\",\"type\":\"string\"}}},\"description\":\"default\"}},\"summary\":\"Get a domain report\",\"x-label\":[\"\\\"\\\\\\\"\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"Get IOC\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\",\"search_ioc\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\",\"search_ioc\\\\\\\\\\\\\\\"\",\"search_ioc\\\\\\\"\",\"search_ioc\\\"\",\"get_ioc\",\"app_validation\"]}},\"/domains/{domain}/comments\":{\"get\":{\"operationId\":\"Get_comments_on_a_domain\",\"parameters\":[{\"description\":\"Generated by shuffler.io OpenAPI\",\"in\":\"path\",\"name\":\"domain\",\"required\":true,\"schema\":{\"type\":\"string\"}}],\"requestBody\":{},\"responses\":{\"default\":{\"content\":{\"text/plain\":{\"schema\":{\"example\":\"\",\"type\":\"string\"}}},\"description\":\"default\"}},\"summary\":\"Get comments on a domain\",\"x-label\":\"list_messages\"},\"post\":{\"operationId\":\"Add_a_comment_to_a_domain\",\"parameters\":[{\"description\":\"Generated by shuffler.io OpenAPI\",\"in\":\"path\",\"name\":\"domain\",\"required\":true,\"schema\":{\"type\":\"string\"}},{\"description\":\"Generated by shuffler.io OpenAPI\",\"example\":\"{\\n \\\"data\\\": {\\n \\\"type\\\": \\\"comment\\\",\\n \\\"attributes\\\": {\\n \\\"text\\\": \\\"Lorem #ipsum dolor sit ...\\\"\\n }\\n }\\n}\",\"in\":\"body\",\"multiline\":true,\"name\":\"body\",\"schema\":{\"type\":\"string\"}}],\"requestBody\":{\"content\":{\"example\":{\"example\":\"{\\n \\\"data\\\": {\\n \\\"type\\\": \\\"comment\\\",\\n \\\"attributes\\\": {\\n \\\"text\\\": \\\"Lorem #ipsum dolor sit ...\\\"\\n }\\n }\\n}\"}},\"description\":\"Generated by Shuffler.io\"},\"responses\":{\"default\":{\"content\":{\"text/plain\":{\"schema\":{\"example\":\"\",\"type\":\"string\"}}},\"description\":\"default\"}},\"summary\":\"Add a comment to a domain\"}},\"/files\":{\"post\":{\"operationId\":\"Upload_a_file\",\"parameters\":[{\"description\":\"Generated by shuffler.io OpenAPI\",\"example\":\"\",\"in\":\"body\",\"multiline\":true,\"name\":\"body\",\"schema\":{\"type\":\"string\"}}],\"requestBody\":{\"content\":{\"example\":{\"example\":\"\"},\"multipart/form-data\":{\"schema\":{\"properties\":{\"fieldname\":{\"type\":\"string\",\"value\":\"file\"}},\"type\":\"object\"}}},\"description\":\"Generated by Shuffler.io\"},\"responses\":{\"default\":{\"content\":{\"text/plain\":{\"schema\":{\"example\":\"\",\"type\":\"string\"}}},\"description\":\"default\"}},\"summary\":\"Upload a file\"}},\"/files/{id}\":{\"get\":{\"description\":\"SHA-256, SHA-1 or MD5 identifying the file\",\"operationId\":\"Get_a_hash_report_\",\"parameters\":[{\"description\":\"Generated by shuffler.io OpenAPI\",\"in\":\"path\",\"name\":\"id\",\"required\":true,\"schema\":{\"type\":\"string\"}}],\"requestBody\":{},\"responses\":{\"default\":{\"content\":{\"text/plain\":{\"schema\":{\"example\":\"\",\"type\":\"string\"}}},\"description\":\"default\"}},\"summary\":\"Get a hash report \",\"x-label\":\"\\\"\\\\\\\"Search IOC\\\\\\\",get_ioc\\\",search_ioc\"}},\"/files/{id}/comments\":{\"get\":{\"operationId\":\"Get_comments_on_a_file\",\"parameters\":[{\"description\":\"Generated by shuffler.io OpenAPI\",\"in\":\"path\",\"name\":\"id\",\"required\":true,\"schema\":{\"type\":\"string\"}}],\"requestBody\":{},\"responses\":{\"default\":{\"content\":{\"text/plain\":{\"schema\":{\"example\":\"\",\"type\":\"string\"}}},\"description\":\"default\"}},\"summary\":\"Get comments on a file\"},\"post\":{\"operationId\":\"Add_a_comment_to_a_file\",\"parameters\":[{\"description\":\"Generated by shuffler.io OpenAPI\",\"in\":\"path\",\"name\":\"id\",\"required\":true,\"schema\":{\"type\":\"string\"}},{\"description\":\"Generated by shuffler.io OpenAPI\",\"example\":\"{\\n \\\"data\\\": {\\n \\\"type\\\": \\\"comment\\\",\\n \\\"attributes\\\": {\\n \\\"text\\\": \\\"Lorem #ipsum dolor sit ...\\\"\\n }\\n }\\n}\",\"in\":\"body\",\"multiline\":true,\"name\":\"body\",\"schema\":{\"type\":\"string\"}}],\"requestBody\":{\"content\":{\"example\":{\"example\":\"{\\n \\\"data\\\": {\\n \\\"type\\\": \\\"comment\\\",\\n \\\"attributes\\\": {\\n \\\"text\\\": \\\"Lorem #ipsum dolor sit ...\\\"\\n }\\n }\\n}\"}},\"description\":\"Generated by Shuffler.io\"},\"responses\":{\"default\":{\"content\":{\"text/plain\":{\"schema\":{\"example\":\"\",\"type\":\"string\"}}},\"description\":\"default\"}},\"summary\":\"Add a comment to a file\"}},\"/ip_addresses/{ip}\":{\"get\":{\"operationId\":\"Get_an_IP_address_report\",\"parameters\":[{\"description\":\"Generated by shuffler.io OpenAPI\",\"in\":\"path\",\"name\":\"ip\",\"required\":true,\"schema\":{\"type\":\"string\"}}],\"requestBody\":{},\"responses\":{\"default\":{\"content\":{\"text/plain\":{\"schema\":{\"example\":\"\",\"type\":\"string\"}}},\"description\":\"default\"}},\"summary\":\"Get an IP address report\",\"x-label\":[\"\\\"\\\\\\\"Get IOC\\\\\\\"\",\"get_ioc\\\"\",\"search_ioc\",\"app_validation\"]}},\"/ip_addresses/{ip}/comments\":{\"get\":{\"operationId\":\"Get_comments_on_an_IP_address\",\"parameters\":[{\"description\":\"Generated by shuffler.io OpenAPI\",\"in\":\"path\",\"name\":\"ip\",\"required\":true,\"schema\":{\"type\":\"string\"}}],\"requestBody\":{},\"responses\":{\"default\":{\"content\":{\"text/plain\":{\"schema\":{\"example\":\"\",\"type\":\"string\"}}},\"description\":\"default\"}},\"summary\":\"Get comments on an IP address\"},\"post\":{\"operationId\":\"Add_a_comment_to_an_IP_address\",\"parameters\":[{\"description\":\"Generated by shuffler.io OpenAPI\",\"in\":\"path\",\"name\":\"ip\",\"required\":true,\"schema\":{\"type\":\"string\"}},{\"description\":\"Generated by shuffler.io OpenAPI\",\"example\":\"{\\n \\\"data\\\": {\\n \\\"type\\\": \\\"comment\\\",\\n \\\"attributes\\\": {\\n \\\"text\\\": \\\"Lorem #ipsum dolor sit ...\\\"\\n }\\n }\\n}\",\"in\":\"body\",\"multiline\":true,\"name\":\"body\",\"schema\":{\"type\":\"string\"}}],\"requestBody\":{\"content\":{\"example\":{\"example\":\"{\\n \\\"data\\\": {\\n \\\"type\\\": \\\"comment\\\",\\n \\\"attributes\\\": {\\n \\\"text\\\": \\\"Lorem #ipsum dolor sit ...\\\"\\n }\\n }\\n}\"}},\"description\":\"Generated by Shuffler.io\"},\"responses\":{\"default\":{\"content\":{\"text/plain\":{\"schema\":{\"example\":\"\",\"type\":\"string\"}}},\"description\":\"default\"}},\"summary\":\"Add a comment to an IP address\"}},\"/urls/{id}\":{\"get\":{\"operationId\":\"Get_a_URL_analysis_report\",\"parameters\":[{\"description\":\"Generated by shuffler.io OpenAPI\",\"in\":\"path\",\"name\":\"id\",\"required\":true,\"schema\":{\"type\":\"string\"}}],\"requestBody\":{},\"responses\":{\"default\":{\"content\":{\"text/plain\":{\"schema\":{\"example\":\"\",\"type\":\"string\"}}},\"description\":\"default\"}},\"summary\":\"Get a URL analysis report\",\"x-label\":[\"\\\"get_ioc\\\"\",\"search_ioc\",\"app_validation\"]}},\"/urls/{id}/comments\":{\"get\":{\"operationId\":\"Get_comments_on_a_URL\",\"parameters\":[{\"description\":\"Generated by shuffler.io OpenAPI\",\"in\":\"path\",\"name\":\"id\",\"required\":true,\"schema\":{\"type\":\"string\"}}],\"requestBody\":{},\"responses\":{\"default\":{\"content\":{\"text/plain\":{\"schema\":{\"example\":\"\",\"type\":\"string\"}}},\"description\":\"default\"}},\"summary\":\"Get comments on a URL\",\"x-label\":\"list_messages\"},\"post\":{\"operationId\":\"Add_a_comment_on_a_URL\",\"parameters\":[{\"description\":\"Generated by shuffler.io OpenAPI\",\"in\":\"path\",\"name\":\"id\",\"required\":true,\"schema\":{\"type\":\"string\"}},{\"description\":\"Generated by shuffler.io OpenAPI\",\"example\":\"{\\n \\\"data\\\": {\\n \\\"type\\\": \\\"comment\\\",\\n \\\"attributes\\\": {\\n \\\"text\\\": \\\"Lorem #ipsum dolor sit ...\\\"\\n }\\n }\\n}\",\"in\":\"body\",\"multiline\":true,\"name\":\"body\",\"schema\":{\"type\":\"string\"}}],\"requestBody\":{\"content\":{\"example\":{\"example\":\"{\\n \\\"data\\\": {\\n \\\"type\\\": \\\"comment\\\",\\n \\\"attributes\\\": {\\n \\\"text\\\": \\\"Lorem #ipsum dolor sit ...\\\"\\n }\\n }\\n}\"}},\"description\":\"Generated by Shuffler.io\"},\"responses\":{\"default\":{\"content\":{\"text/plain\":{\"schema\":{\"example\":\"\",\"type\":\"string\"}}},\"description\":\"default\"}},\"summary\":\"Add a comment on a URL\"}}},\"schemes\":[\"https:\"],\"servers\":[{\"url\":\"https://www.virustotal.com/api/v3\"}],\"tags\":[{\"name\":\"intel\"},{\"name\":\"virustotal\"}]}","id":"721b010721b5d2b2e2dbe8972e300d39","success":true}