ines-num-old"> 23
+import { EmailComposer } from '@ionic-native/email-composer/ngx';
24
+
22 25
 // library.add(fas,far,fab);
23 26
 
24 27
 @NgModule({
@@ -28,6 +31,8 @@ import { NativeGeocoder } from '@ionic-native/native-geocoder/ngx';
28 31
   providers: [
29 32
     Geolocation,
30 33
     NativeGeocoder,
34
+    CallNumber,
35
+    EmailComposer,
31 36
     { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
32 37
   ],
33 38
   bootstrap: [AppComponent],

+ 25 - 21
src/app/forgot-password/forgot-password.page.html

@@ -1,31 +1,35 @@
1 1
 <ion-header>
2
-  <ion-toolbar>
2
+  <ion-toolbar class="new-background-color">
3
+    <ion-buttons slot="start" color="light">
4
+      <ion-back-button></ion-back-button>
5
+    </ion-buttons>
3 6
     <ion-title>Wellness Route</ion-title>
4 7
   </ion-toolbar>
5 8
 </ion-header>
6
-
7 9
 <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>
10
+  <div><img src="/assets/images/image-006.jpg"></div>
11
+  <ion-grid>
16 12
     <ion-row>
17 13
       <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>
14
+        <div class="ion-text-center">
15
+          <h1>ลืมรหัสผ่าน</h1>
16
+        </div>
22 17
       </ion-col>
23 18
     </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>
19
+    <form>
20
+      <ion-row>
21
+        <ion-col>
22
+          <ion-item lines="full">
23
+            <ion-label position="floating">อีเมล์</ion-label>
24
+            <ion-input type="email" name="email" [(ngModel)]="email" inputmode="email"></ion-input>
25
+          </ion-item>
26
+        </ion-col>
27
+      </ion-row>
28
+      <ion-row>
29
+        <ion-col>
30
+          <ion-button type="submit" color="danger" expand="block" (click)="resetPassword()">ส่งรหัสผ่าน</ion-button>
31
+        </ion-col>
32
+      </ion-row>
33
+    </form>
34
+  </ion-grid>
31 35
 </ion-content>

+ 4 - 4
src/app/home/home.page.html

@@ -1,4 +1,4 @@
1
-<ion-header class="ion-no-border">
1
+<ion-header>
2 2
   <ion-toolbar class="new-background-color">
3 3
     <ion-title>Wellness Route</ion-title>
4 4
   </ion-toolbar>
@@ -64,10 +64,10 @@
64 64
     <ion-row>
65 65
       <ion-col>
66 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="">
67
+          <div *ngIf="pldata.better_featured_image != null">
68
+            <img src="{{pldata.better_featured_image.source_url}}" alt="">
69 69
           </div>
70
-          <div *ngIf="$any(pldata).better_featured_image == null">
70
+          <div *ngIf="pldata.better_featured_image == null">
71 71
             <img src="/assets/images/temp.png" />
72 72
           </div>
73 73
           <ion-card-header>            

+ 1 - 11
src/app/home/home.page.scss

@@ -4,24 +4,14 @@ ion-card-title {
4 4
   font-size: 20px;
5 5
 }
6 6
 
7
-ion-searchbar{
8
-  // --color:#000;
9
-  // --placeholder-color:#000;
10
-  // --background:#000;
11
-}
12
-
13 7
 .search{
14 8
   padding: 0px !important;
15 9
   // margin-bottom: 30px;
16 10
   margin-top: 10px;
17 11
 }
18 12
 
19
-// .red {
20
-//   color: rgb(255, 0, 0);
21
-// }
22
-
23 13
 .catshow {
24
-  height: 100px;
14
+  height: 80px;
25 15
   // background-color: rgb(183, 210, 236);
26 16
   border: solid 1px;
27 17
   border-color: cornflowerblue;

+ 71 - 65
src/app/login/login.page.html

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

+ 22 - 23
src/app/login/login.page.scss

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

+ 1 - 5
src/app/nearme/nearme.page.html

@@ -8,12 +8,8 @@
8 8
 </ion-header>
9 9
 
10 10
 <ion-content>
11
+  <div #nearmap id="nearmap"></div>
11 12
   <ion-grid>
12
-    <ion-row>
13
-      <ion-col>
14
-        <div #nearmap id="nearmap"></div>
15
-      </ion-col>
16
-    </ion-row>
17 13
     <ion-row >
18 14
       <ion-col>
19 15
         <ion-card *ngFor="let nearm of placenear">

+ 7 - 8
src/app/nearme/nearme.page.scss

@@ -1,9 +1,8 @@
1 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
-  #nearmap {
8
-    height: 300px;
9
-}
2
+  font-family: "IBM Plex Sans Thai", sans-serif !important;
3
+  font-weight: 600;
4
+  font-size: 20px;
5
+}
6
+#nearmap {
7
+  height: 300px;
8
+}

+ 1 - 3
src/app/place/place.page.html

@@ -8,8 +8,7 @@
8 8
 </ion-header>
9 9
 
10 10
 <ion-content>
11
-  <img src="/assets/images/golf-bg.jpg">
12
-  <div class="holidaycard">
11
+  <img src="/assets/images/image-010.jpg">
13 12
     <ion-grid>
14 13
       <ion-row>
15 14
         <ion-col size="12">
@@ -35,5 +34,4 @@
35 34
         </ion-card-header>
36 35
       </ion-card>
37 36
     </ion-grid>
38
-  </div>
39 37
 </ion-content>

+ 12 - 12
src/app/place/place.page.scss

@@ -1,15 +1,15 @@
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
-  }
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 13
   
14 14
   ion-card-title {
15 15
     font-family: "IBM Plex Sans Thai", sans-serif !important;

+ 43 - 26
src/app/placedetail/placedetail.page.html

@@ -16,7 +16,7 @@
16 16
   </div>
17 17
   <!-- <img src="{{placelist?.better_featured_image.source_url}}"> -->
18 18
   <ion-grid>
19
-    <ion-row>
19
+    <ion-row color="light">
20 20
       <ion-col size="12">
21 21
         <div class="txt-place-title">{{placelist?.title.rendered}}</div>
22 22
       </ion-col>
@@ -25,16 +25,22 @@
25 25
         <div>{{ placelist?.acf.openclose }}</div>
26 26
       </ion-col>
27 27
       <ion-col size="12">
28
-        {{ placelist?.acf.gmap.address }}
29
-        {{ placelist?.acf.gmap.lat }}
30
-        {{ placelist?.acf.gmap.lng }}
31
-        <img src="/assets/images/map-temp.jpg" alt="">
28
+        <!-- {{ placelist?.acf.gmap.address }} -->
29
+        <!-- {{ placelist?.acf.gmap.lat }}
30
+        {{ placelist?.acf.gmap.lng }} -->
31
+        <div class="map-wrapper">
32
+          <div id="map_center">
33
+            <img src="/assets/icon/location-marker.png" />
34
+          </div>
35
+          <div #map id="map"></div>
36
+        </div>
32 37
       </ion-col>
33 38
       <ion-col size="12">
34 39
         <ion-row>
35 40
           <ion-col size="4" class="ion-text-center">
36
-            <!-- <div [innerHTML]="placelist?.acf.phone"></div>                         -->
37
-            <fa-icon [icon]="['fas', 'phone-square-alt']" size="2x"></fa-icon>
41
+            <div (click)="callNow('{{placelist?.acf.phone}}')">
42
+              <fa-icon [icon]="['fas', 'phone-square-alt']" size="2x"></fa-icon>
43
+            </div>
38 44
           </ion-col>
39 45
           <ion-col size="4" class="ion-text-center">
40 46
             <!-- <div [innerHTML]="placelist?.acf.phone"></div>                         -->
@@ -42,29 +48,40 @@
42 48
           </ion-col>
43 49
           <ion-col size="4" class="ion-text-center">
44 50
             <!-- <div [innerHTML]="placelist?.acf.email"></div>             -->
45
-            <fa-icon [icon]="['fas', 'envelope']" size="2x"></fa-icon>
51
+            <div (click)="email2Place('{{placelist?.acf.email}}')">
52
+              <fa-icon [icon]="['fas', 'envelope']" size="2x"></fa-icon>
53
+            </div>
46 54
           </ion-col>
47 55
         </ion-row>
48 56
       </ion-col>
57
+
49 58
       <ion-col size="12">
50
-        <div class="txt-lead">ที่อยู่</div>
51
-        <div [innerHTML]="placelist?.acf.address"></div>
52
-      </ion-col>
53
-      <ion-col size="12">
54
-        <!-- <div class="txt-lead">รายละเอียด</div>
55
-        <div [innerHTML]="placelist?.content.rendered"></div> -->
56
-        <!-- <div>{{placelist?.content.rendered}}</div> -->
57
-        <!-- <ion-button (click)="loadMap()" shape="round" color="dark">
58
-          <ion-icon slot="start" name="locate"></ion-icon>
59
-          Where I Am
60
-        </ion-button> -->
61
-        <div class="map-wrapper">
62
-          <div id="map_center">
63
-            <img src="assets/icon/location-marker.png" />
64
-          </div>
65
-          <div #map id="map"></div>
66
-        </div>
67
-        
59
+        <ion-segment (ionChange)="segmentChanged($event)" value="list1">
60
+          <ion-segment-button value="list1">
61
+            <ion-label>
62
+              ที่อยู่
63
+            </ion-label>
64
+          </ion-segment-button>
65
+          <ion-segment-button value="list2">
66
+            <ion-label>
67
+              รายละเอียด
68
+            </ion-label>
69
+          </ion-segment-button>
70
+        </ion-segment>
71
+
72
+        <ion-list *ngIf="segment === 'list1'">
73
+          <ion-col size="12">
74
+            <!-- <div class="txt-lead">ที่อยู่</div> -->
75
+            <div [innerHTML]="placelist?.acf.address"></div>
76
+          </ion-col>
77
+        </ion-list>
78
+
79
+        <ion-list *ngIf="segment === 'list2'">
80
+          <ion-col size="12">
81
+            <!-- <div class="txt-lead">ที่อยู่</div> -->
82
+            <div [innerHTML]="placelist?.content.rendered"></div>
83
+          </ion-col>
84
+        </ion-list>
68 85
       </ion-col>
69 86
     </ion-row>
70 87
 

+ 0 - 17
src/app/placedetail/placedetail.page.scss

@@ -1,16 +1,3 @@
1
-// ion-toolbar{
2
-//     --background: transparent;
3
-//     --border-color: transparent;
4
-// }
5
-// ion-toolbar{
6
-//     --background: transparent;
7
-//     --border-color: transparent;
8
-// }
9
-// ion-content{
10
-//     --offset-top:0px;
11
-//     position: absolute;
12
-// }
13
-
14 1
 .bg {
15 2
   position: absolute;
16 3
   left: 0px;
@@ -29,10 +16,6 @@
29 16
     --background: white;
30 17
   }
31 18
 }
32
-
33
-.asd {
34
-}
35
-
36 19
 .asd .country {
37 20
   position: absolute;
38 21
   top: 50px;

+ 19 - 19
src/app/placedetail/placedetail.page.ts

@@ -4,6 +4,8 @@ import { WpServiceService } from '../wp-service.service';
4 4
 
5 5
 import { Geolocation } from '@ionic-native/geolocation/ngx';
6 6
 import { NativeGeocoder, NativeGeocoderResult, NativeGeocoderOptions } from '@ionic-native/native-geocoder/ngx';
7
+import { CallNumber } from '@ionic-native/call-number/ngx';
8
+import { EmailComposer } from '@ionic-native/email-composer/ngx';
7 9
 
8 10
 declare var google;
9 11
 
@@ -17,6 +19,8 @@ export class PlacedetailPage implements OnInit {
17 19
   data: any;
18 20
   placelist: any;
19 21
 
22
+  public segment: string = "list1";
23
+
20 24
   @ViewChild('map', { static: false }) mapElement: ElementRef;
21 25
   map: any;
22 26
   address: string;
@@ -24,9 +28,9 @@ export class PlacedetailPage implements OnInit {
24 28
   longitude: number;
25 29
   latdynamic: any;
26 30
   londynamic: any;
27
-  
28 31
 
29
-  constructor(private wpservice: WpServiceService, private route: ActivatedRoute, private router: Router, private geolocation: Geolocation, private nativeGeocoder: NativeGeocoder) { }
32
+
33
+  constructor(private wpservice: WpServiceService, private route: ActivatedRoute, private router: Router, private geolocation: Geolocation, private nativeGeocoder: NativeGeocoder,private callNumber: CallNumber, private emailComposer: EmailComposer) { }
30 34
   @Input() id: string;
31 35
   showDiss = false;
32 36
 
@@ -121,21 +125,17 @@ export class PlacedetailPage implements OnInit {
121 125
 
122 126
   }
123 127
 
124
-  // getAddressFromCoords2(lattitude, longitude) {
125
-  //   console.log("getAddressFromCoords2 " + lattitude + " " + longitude);
126
-  //   let options: NativeGeocoderOptions = {
127
-  //     useLocale: true,
128
-  //     maxResults: 5
129
-  //   };
130
-  // }
131
-
132
-  // getGeoencoder(latitude, longitude) {
133
-  //   this.nativeGeocoder.reverseGeocode(latitude, longitude, this.geoencoderOptions)
134
-  //     .then((result: NativeGeocoderResult[]) => {
135
-  //       this.address = this.generateAddress(result[0]);
136
-  //     })
137
-  //     .catch((error: any) => {
138
-  //       alert('Error getting location' + JSON.stringify(error));
139
-  //     });
140
-  // }
128
+  segmentChanged(ev: any) {
129
+    this.segment = ev.detail.value;
130
+  }
131
+
132
+  callNow(number) {
133
+    this.callNumber.callNumber(number, true)
134
+      .then(res => console.log('Launched dialer!', res))
135
+      .catch(err => console.log('Error launching dialer', err));
136
+  }
137
+
138
+  email2Place(mail) {
139
+    this.emailComposer.open(mail)
140
+  }
141 141
 }

+ 18 - 11
src/app/profile/profile.page.html

@@ -1,10 +1,14 @@
1 1
 <ion-header>
2
-  <ion-toolbar>
2
+  <ion-toolbar class="new-background-color">
3
+    <ion-buttons slot="start" color="light">
4
+      <ion-back-button></ion-back-button>
5
+    </ion-buttons>
3 6
     <ion-title>Wellness Route</ion-title>
4 7
   </ion-toolbar>
5 8
 </ion-header>
6
-<ion-content fullscreen="true">
7
-  <!-- <div *ngIf="(user2 | async) as user; else loading"> -->
9
+<ion-content>
10
+  <ion-grid>
11
+    <!-- <div *ngIf="(user2 | async) as user; else loading"> -->
8 12
     <ion-row>
9 13
       <ion-col>
10 14
         <div class="ion-text-center">
@@ -17,32 +21,35 @@
17 21
         <div class="card">
18 22
           <div class="header">
19 23
             <div class="avatar">
20
-              <img [src]="$any(user).picture_large.data.url" *ngIf="user['picture_large'] != undefined" />
21
-              <img src="/assets/images/icon-user.png" *ngIf="user['picture_large'] == undefined" />
24
+              <!-- <img [src]="$any(user).picture_large.data.url" *ngIf="user['picture_large'] != undefined" /> -->
25
+              <!-- <img src="/assets/images/icon-user.png" *ngIf="user['picture_large'] == undefined" /> -->
26
+              <img src="/assets/images/icon-user.png">
22 27
             </div>
23 28
           </div>
24 29
         </div>
25 30
         <div class="card-body">
26 31
           <div class="user-meta ion-text-center">
27
-            <h3 class="playername">{{ $any(user).name }}</h3>
32
+            <!-- <h3 class="playername">{{ $any(user).name }}</h3> -->
28 33
           </div>
29 34
           <form>
30 35
             <ion-item lines="full">
31 36
               <ion-label>ชื่อ</ion-label>
32
-              {{ $any(user).name }}
37
+              <!-- {{ $any(user).name }} -->
33 38
             </ion-item>
34 39
             <ion-item lines="full">
35
-              <ion-label>Email</ion-label>{{ $any(user).email }}
40
+              <ion-label>อีเมล์</ion-label>
41
+              <!-- {{ $any(user).email }} -->
36 42
             </ion-item>
37 43
             <div class="ion-padding-vertical">
38
-              <ion-button type="submit" color="danger" expand="block" (click)="logout()">Log Out</ion-button>
44
+              <!-- <ion-button type="submit" color="danger" expand="block" (click)="logout()">Log Out</ion-button> -->
39 45
             </div>
40 46
           </form>
41 47
         </div>
42 48
       </ion-col>
43 49
     </ion-row>
44
-  <!-- </div> -->
45
-  <!-- <ng-template #loading>
50
+    <!-- </div> -->
51
+    <!-- <ng-template #loading>
46 52
     Loading stuff...
47 53
   </ng-template> -->
54
+  </ion-grid>
48 55
 </ion-content>

+ 1 - 0
src/app/profile/profile.page.ts

@@ -8,6 +8,7 @@ import { Component, OnInit } from '@angular/core';
8 8
 export class ProfilePage implements OnInit {
9 9
 
10 10
   user2: any;
11
+  user: any;
11 12
   
12 13
   constructor() { }
13 14
 

+ 28 - 29
src/app/province/province.page.html

@@ -6,34 +6,33 @@
6 6
     <ion-title>Wellnewss Route</ion-title>
7 7
   </ion-toolbar>
8 8
 </ion-header>
9
-
10 9
 <ion-content>
11
-  <img src="/assets/images/welcome_drone.jpeg" alt="">
12
-  <div class="holidaycard">
13
-    <ion-grid>
14
-      <ion-row>
15
-        <ion-col size="12">
16
-          <div class="txt-place-title">Province Name</div>
17
-        </ion-col>
18
-      </ion-row>
19
-      <ion-row>
20
-        <ion-col>
21
-          <ion-toolbar class="search">
22
-            <ion-searchbar placeholder="ค้นหา"></ion-searchbar>
23
-          </ion-toolbar>
24
-        </ion-col>
25
-      </ion-row>
26
-      <ion-card *ngFor="let provlist of provicelist">
27
-        <div *ngIf="$any(provlist).better_featured_image != null">
28
-          <img src="{{$any(provlist).better_featured_image.source_url}}" alt="">
29
-        </div>
30
-        <div *ngIf="$any(provlist).better_featured_image == null">
31
-          <img src="/assets/images/temp.png" />
32
-        </div>
33
-        <ion-card-header>
34
-          <a [routerLink]="['/tabs/place/', provlist.id]"><ion-card-title [innerHTML]="provlist.title.rendered"></ion-card-title></a>
35
-        </ion-card-header>
36
-      </ion-card>
37
-    </ion-grid>
38
-  </div>
10
+  <img src="/assets/images/image-004.jpg" alt="">
11
+  <ion-grid>
12
+    <ion-row>
13
+      <ion-col size="12">
14
+        <div class="txt-place-title">Province Name</div>
15
+      </ion-col>
16
+    </ion-row>
17
+    <ion-row>
18
+      <ion-col>
19
+        <ion-toolbar class="search">
20
+          <ion-searchbar placeholder="ค้นหา"></ion-searchbar>
21
+        </ion-toolbar>
22
+      </ion-col>
23
+    </ion-row>
24
+    <ion-card *ngFor="let provlist of provicelist">
25
+      <div *ngIf="$any(provlist).better_featured_image != null">
26
+        <img src="{{$any(provlist).better_featured_image.source_url}}" alt="">
27
+      </div>
28
+      <div *ngIf="$any(provlist).better_featured_image == null">
29
+        <img src="/assets/images/temp.png" />
30
+      </div>
31
+      <ion-card-header>
32
+        <a [routerLink]="['/tabs/place/', provlist.id]">
33
+          <ion-card-title [innerHTML]="provlist.title.rendered"></ion-card-title>
34
+        </a>
35
+      </ion-card-header>
36
+    </ion-card>
37
+  </ion-grid>
39 38
 </ion-content>

+ 12 - 12
src/app/province/province.page.scss

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

+ 10 - 7
src/app/register-form/register-form.page.html

@@ -1,10 +1,13 @@
1 1
 <ion-header>
2
-  <ion-toolbar>
2
+  <ion-toolbar class="new-background-color">
3
+    <ion-buttons slot="start" color="light">
4
+      <ion-back-button></ion-back-button>
5
+    </ion-buttons>
3 6
     <ion-title>Wellness Route</ion-title>
4 7
   </ion-toolbar>
5 8
 </ion-header>
6
-
7 9
 <ion-content>
10
+  <div><img src="/assets/images/image-001.jpg"></div>
8 11
   <ion-row>
9 12
     <ion-col>
10 13
       <div class="ion-text-center">
@@ -13,9 +16,9 @@
13 16
     </ion-col>
14 17
   </ion-row>
15 18
   <ion-row>
16
-    <ion-col>      
19
+    <ion-col>
17 20
       <form>
18
-        <ion-text *ngIf="errorText" color="primary" style='background-color:#fff'>
21
+        <ion-text *ngIf="errorText" color="primary">
19 22
           {{ errorText }}
20 23
         </ion-text>
21 24
         <ion-item lines="full">
@@ -45,9 +48,9 @@
45 48
         </ion-item>
46 49
 
47 50
         <div class="ion-padding-vertical">
48
-          <ion-button type="submit" color="success" expand="block" (click)="register()">ลงทะเบียน</ion-button>
51
+          <ion-button type="submit" color="success" expand="block">ลงทะเบียน</ion-button>
49 52
         </div>
50 53
       </form>
51 54
     </ion-col>
52
-  </ion-row>  
53
-</ion-content>
55
+  </ion-row>
56
+</ion-content>

+ 10 - 7
src/app/register/register.page.html

@@ -1,20 +1,23 @@
1 1
 <ion-header>
2
-  <ion-toolbar>
3
-    <ion-title>ลงทะเบียน</ion-title>
2
+  <ion-toolbar class="new-background-color">
3
+    <ion-buttons slot="start" color="light">
4
+      <ion-back-button></ion-back-button>
5
+    </ion-buttons>
6
+    <ion-title>Wellness Route</ion-title>
4 7
   </ion-toolbar>
5 8
 </ion-header>
6
-
7 9
 <ion-content class="auth-form">
10
+  <div><img src="/assets/images/image-001.jpg"></div>
8 11
   <ion-grid>
9 12
     <ion-row>
10 13
       <ion-col align-self-center>
11
-        <ion-button [routerLink]="['/registration']" expand="block" color="primary">Register</ion-button>
14
+        <ion-button [routerLink]="['/register-form']" expand="block" color="primary">ลงทะเบียนผู้ใช้งาน</ion-button>
12 15
 
13
-        <span class="divider line one-line">or</span>
16
+        <span class="divider line one-line">หรือ</span>
14 17
 
15
-        <span class="already">Already a user?</span>
18
+        <span class="already">มีชื่อผู้ใช้งานแล้ว</span>
16 19
 
17
-        <ion-button [routerLink]="['/login']" expand="block" color="danger">Sign In</ion-button>
20
+        <ion-button [routerLink]="['/login']" expand="block" color="danger">เข้าสู่ระบบ</ion-button>
18 21
       </ion-col>
19 22
     </ion-row>
20 23
   </ion-grid>

+ 2 - 2
src/app/register/register.page.scss

@@ -12,7 +12,7 @@
12 12
   .line {
13 13
     align-items: center;
14 14
     margin: 1em -1em;
15
-    color: #cccccc;
15
+    color: #5f5e5e;
16 16
     
17 17
     &:before,
18 18
     &:after {
@@ -24,7 +24,7 @@
24 24
   .one-line {
25 25
     &:before,
26 26
     &:after {
27
-       background: #cccccc;
27
+       background: #5f5e5e;
28 28
     }
29 29
   }
30 30
   

+ 29 - 24
src/app/reset-password/reset-password.page.html

@@ -1,33 +1,38 @@
1 1
 <ion-header>
2
-  <ion-toolbar>
2
+  <ion-toolbar class="new-background-color">
3
+    <ion-buttons slot="start" color="light">
4
+      <ion-back-button></ion-back-button>
5
+    </ion-buttons>
3 6
     <ion-title>Wellness Route</ion-title>
4 7
   </ion-toolbar>
5 8
 </ion-header>
6
-
7 9
 <ion-content>
8
-  <ion-row>
9
-    <ion-col class="ion-text-center">
10
-      <h1>กรุณาใส่รหัสผ่านใหม่</h1>
11
-    </ion-col>
12
-  </ion-row>
13
-  <form>
14
-    <ion-row>
15
-      <ion-col>
16
-        <ion-item lines="full">
17
-          <ion-label position="floating">รหัสผ่าน</ion-label>
18
-          <ion-input type="password" required></ion-input>
19
-        </ion-item>
20
-
21
-        <ion-item lines="full">
22
-          <ion-label position="floating">ยืนยัน รหัสผ่าน</ion-label>
23
-          <ion-input type="password" required></ion-input>
24
-        </ion-item>
25
-      </ion-col>
26
-    </ion-row>
10
+  <div><img src="/assets/images/image-007.jpg"></div>
11
+  <ion-grid>
27 12
     <ion-row>
28
-      <ion-col>
29
-        <ion-button type="submit" color="success" expand="block">ส่ง</ion-button>
13
+      <ion-col class="ion-text-center">
14
+        <h1>กรุณาใส่รหัสผ่านใหม่</h1>
30 15
       </ion-col>
31 16
     </ion-row>
32
-  </form>
17
+    <form>
18
+      <ion-row>
19
+        <ion-col>
20
+          <ion-item lines="full">
21
+            <ion-label position="floating">รหัสผ่าน</ion-label>
22
+            <ion-input type="password" required></ion-input>
23
+          </ion-item>
24
+
25
+          <ion-item lines="full">
26
+            <ion-label position="floating">ยืนยัน รหัสผ่าน</ion-label>
27
+            <ion-input type="password" required></ion-input>
28
+          </ion-item>
29
+        </ion-col>
30
+      </ion-row>
31
+      <ion-row>
32
+        <ion-col>
33
+          <ion-button type="submit" color="success" expand="block">ส่ง</ion-button>
34
+        </ion-col>
35
+      </ion-row>
36
+    </form>
37
+  </ion-grid>
33 38
 </ion-content>

+ 2 - 2
src/app/tabs/tabs.page.html

@@ -1,9 +1,9 @@
1 1
 <ion-tabs>
2
-  <ion-fab vertical="bottom" horizontal="center" translucent="true">
2
+  <!-- <ion-fab vertical="bottom" horizontal="center" translucent="true">
3 3
     <ion-fab-button routerLink="nearme" routerDirection="forward">
4 4
     <ion-icon name="navigate"></ion-icon>
5 5
     </ion-fab-button>
6
-  </ion-fab>
6
+  </ion-fab> -->
7 7
   <ion-tab-bar slot="bottom">
8 8
     <ion-tab-button tab="home">
9 9
       <ion-icon name="home"></ion-icon>

+ 2 - 1
src/app/wp-service.service.ts

@@ -31,7 +31,8 @@ export class WpServiceService {
31 31
 
32 32
   getPlaceDetail(id) {
33 33
     return this.http.get(
34
-      "http://tamtime.iamarray.xyz/wp-json/wp/v2/place/"+id+"/?_embed"
34
+      // "http://tamtime.iamarray.xyz/wp-json/wp/v2/place/"+id+"/?_embed"
35
+      "/assets/json/place173.json"
35 36
     );
36 37
   }
37 38
 

BIN
src/assets/images/image-001.jpg


BIN
src/assets/images/image-002.jpg


BIN
src/assets/images/image-003.jpg


BIN
src/assets/images/image-004.jpg


BIN
src/assets/images/image-005.jpg


BIN
src/assets/images/image-006.jpg


BIN
src/assets/images/image-007.jpg


BIN
src/assets/images/image-008.jpg


BIN
src/assets/images/image-009.jpg


BIN
src/assets/images/image-010.jpg


BIN
src/assets/images/image-011.jpg


BIN
src/assets/images/image-012.jpg


File diff suppressed because it is too large
+ 1 - 0
src/assets/json/place173.json


+ 18 - 7
src/global.scss

@@ -116,6 +116,17 @@
116 116
   --color: #ffffff;
117 117
 }
118 118
 
119
+// ion-content {
120
+//   --background: linear-gradient(
121
+//     to bottom,
122
+//     #a7e9ff,
123
+//     #8fd8fd,
124
+//     #7ec7fb,
125
+//     #78b4f6,
126
+//     #7c9fee
127
+//   );
128
+// }
129
+
119 130
 ion-title {
120 131
   font-family: "Kanit", sans-serif !important;
121 132
   font-weight: 500;
@@ -160,12 +171,12 @@ ion-button {
160 171
 
161 172
 a {
162 173
   text-decoration: none;
163
- }
164
- 
165
-// ion-content {
166
-//   --background: url(/assets/images/wnr-bg.jpg) no-repeat center/cover fixed;
167
-// }
174
+}
175
+
176
+.image-page-cover {
177
+  height: 200px;
178
+}
168 179
 .ios ion-fab-button {
169
-  position:absolute;
180
+  position: absolute;
170 181
   bottom: 25px;
171
-}
182
+}

tum/soc - Gogs: Simplico Git Service

Aucune description

CODESTYLE.md 6.1KB

Coding style

If you wish to develop in DFIR-IRIS, please make sure to read the following tips.

Versioning

The project adheres to semantic versioning, see: https://semver.org/.

Git workflow

The workflow is based on the evolution of the following branches:

  • there are two long-lived branches: master and develop,
  • master points to the most recent delivered version,
  • development of the next version is done on branch develop,
  • there are two types of short-lived branches: feature branches out of develop and hotfix branches out of master.

Delivered versions are tagged with their number, for instance v2.4.11, v2.1.0-beta-1.

The operations which make up the workflow are the following:

  • safe and small modifications, which do not require any review, may be directly performed on branch develop git switch develop
  • modifications, which either imply more work or are risky, must be performed on a branch of their own (a feature branch) git switch develop git switch -c <branch-name> git push --set-upstream origin <branch-name>
  • when work on the branch is ready to be published, then a pull request (PR) is created from the GitHub interface. Do not forget to choose develop as the base branch (by default it is set to master, more information here).
  • it is preferable to rebase feature branches regularly and before opening a PR. This makes the merge into develop simpler. git switch -c <branch-name> git rebase origin/develop
  • it is preferable to keep feature branches short-lived (< 2 weeks)
  • when develop is ready to be delivered, it is tagged with the next version number (major, minor or patch), and merged into master
  • when a bug must be urgently fixed on the latest delivered version, a hotfix branch may be created from master
  • when a hotfix branch is ready to be delivered, it is tagged with the next patch version number, and merged into master. The modification is brought back into develop by a merge or cherry-pick.
  • once merged, short-lived branches are deleted.

Note: for the time being, there is no maintenance on old delivered versions.

Commits

Try to follow the repository convention:

  • If it's not linked to an issue, use the format [action] Commit message, with action being a 3 letters action related to the commit, eg ADDfor additions, DEL for deletions, IMP for improvements, etc.
  • If it's linked to an issue, prepend with the issue ID, i.e [#issue_id][action] Commit message

License header

New files should be prefixed by the following license header, where ${current_year} is replaced by the current year (for instance 2024):

#  IRIS Source Code
#  Copyright (C) ${current_year} - DFIR-IRIS
#  contact@dfir-iris.org
#
#  This program is free software; you can redistribute it and/or
#  modify it under the terms of the GNU Lesser General Public
#  License as published by the Free Software Foundation; either
#  version 3 of the License, or (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
#  Lesser General Public License for more details.
#
#  You should have received a copy of the GNU Lesser General Public License
#  along with this program; if not, write to the Free Software Foundation,
#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

Python coding rules

  • do not prefix files with any shebang, such as: python #!/usr/bin/env python3
  • use string interpolation (f-strings, https://peps.python.org/pep-0498/), rather than the string format method (https://podalirius.net/en/articles/python-format-string-vulnerabilities/)
  • prefix names of all private fields, methods and variables with underscore (_). This allows any code maintainer to immediately spot which code elements can be freely modified without having to worry about the external context. Note: private elements are only called within the modules in which they are defined.
  • Function names should be prefixed by the module name they belong to. Example: iocs_create instead of create
  • have only one import per line. For instance replace: python from app import app, db with python from app import app from app import db

Javascript coding rules

Code

The code should be pretty easy to apprehend. It's not perfect, but it will improve over time. Some documentation about development is available here.
Here are the main takes :

  • Routes : these are the things that describes how URI should be handled. Routes are split by categories as in the UI menu. They are defined in source > app > blueprints. A route providing a web page (i.e non API) relies on templates. Each page template is present in the templates directory of the target route.
  • Database requests: we are trying to split the DB code from the routes code. This is partially done and will improve over time. The DB code is provided in source > app > datamgmt.
  • HTML pages: as specified above each page template is set in the templates directory of the corresponding route. These templates are based on layouts, which are defined in source > app > templates.
  • Static contents : images, JS and CSS are defined in ui > public > assets and ui > src for our own JS code.

If your code implies database changes, please create an alembic migration script.

alembic -c app/alembic.ini revision -m <What's changed>

And then modifies the script in source > app > alembic so that the migration can be done automatically.