anguage-json"> 22249
+      "version": "5.22.0-beta-1",
22250
+      "resolved": "https://registry.npmjs.org/@ionic-native/call-number/-/call-number-5.22.0-beta-1.tgz",
22251
+      "integrity": "sha512-8ff9xYa1Lvm4uW8T+ftfPLVw805UzDOpWQIFk8wFc8tdWuXx+KS940Ws5ZMV/ERb0LI97/N2N5msIQeLZT9HIA==",
22252
+      "requires": {
22253
+        "@types/cordova": "latest"
22254
+      }
22255
+    },
22190
     "@ionic-native/core": {
22256
     "@ionic-native/core": {
22191
       "version": "5.36.0",
22257
       "version": "5.36.0",
22192
       "resolved": "https://registry.npmjs.org/@ionic-native/core/-/core-5.36.0.tgz",
22258
       "resolved": "https://registry.npmjs.org/@ionic-native/core/-/core-5.36.0.tgz",
22196
         "@types/cordova": "latest"
22262
         "@types/cordova": "latest"
22197
       }
22263
       }
22198
     },
22264
     },
22265
+    "@ionic-native/email-composer": {
22266
+      "version": "5.36.0",
22267
+      "resolved": "https://registry.npmjs.org/@ionic-native/email-composer/-/email-composer-5.36.0.tgz",
22268
+      "integrity": "sha512-v732Jz3w4ItQqM7c2IzIxQQH+zT1DtQ7z635Fpbw4OJwpn6mImTms/F1c6hLJ50YmS/FYuI6rLbFRE/7BX1LUA==",
22269
+      "requires": {
22270
+        "@types/cordova": "latest"
22271
+      }
22272
+    },
22199
     "@ionic-native/geolocation": {
22273
     "@ionic-native/geolocation": {
22200
       "version": "5.36.0",
22274
       "version": "5.36.0",
22201
       "resolved": "https://registry.npmjs.org/@ionic-native/geolocation/-/geolocation-5.36.0.tgz",
22275
       "resolved": "https://registry.npmjs.org/@ionic-native/geolocation/-/geolocation-5.36.0.tgz",
23879
         "get-intrinsic": "^1.0.2"
23953
         "get-intrinsic": "^1.0.2"
23880
       }
23954
       }
23881
     },
23955
     },
23956
+    "call-number": {
23957
+      "version": "1.0.1",
23958
+      "resolved": "https://registry.npmjs.org/call-number/-/call-number-1.0.1.tgz",
23959
+      "integrity": "sha1-v52q5If9alVz+JqjZV++ivA2r9I=",
23960
+      "dev": true
23961
+    },
23882
     "callsites": {
23962
     "callsites": {
23883
       "version": "3.1.0",
23963
       "version": "3.1.0",
23884
       "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
23964
       "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
24583
       "integrity": "sha1-/Ajzci5n7ve2xnv8mag99q3Quro=",
24663
       "integrity": "sha1-/Ajzci5n7ve2xnv8mag99q3Quro=",
24584
       "dev": true
24664
       "dev": true
24585
     },
24665
     },
24666
+    "cordova-plugin-email-composer": {
24667
+      "version": "0.9.2",
24668
+      "resolved": "https://registry.npmjs.org/cordova-plugin-email-composer/-/cordova-plugin-email-composer-0.9.2.tgz",
24669
+      "integrity": "sha512-w8eQZ6lbYWut13o/Cprixmacfyq5hds7DAjuTL34eQhyWWd/DA/o6ziiyY3So2ZOozeQ4DxQpyPN4BiqUKcyew==",
24670
+      "dev": true
24671
+    },
24586
     "cordova-plugin-geolocation": {
24672
     "cordova-plugin-geolocation": {
24587
       "version": "4.1.0",
24673
       "version": "4.1.0",
24588
       "resolved": "https://registry.npmjs.org/cordova-plugin-geolocation/-/cordova-plugin-geolocation-4.1.0.tgz",
24674
       "resolved": "https://registry.npmjs.org/cordova-plugin-geolocation/-/cordova-plugin-geolocation-4.1.0.tgz",

+ 7 - 1
package.json

26
     "@fortawesome/free-brands-svg-icons": "^5.15.4",
26
     "@fortawesome/free-brands-svg-icons": "^5.15.4",
27
     "@fortawesome/free-regular-svg-icons": "^5.15.4",
27
     "@fortawesome/free-regular-svg-icons": "^5.15.4",
28
     "@fortawesome/free-solid-svg-icons": "^5.15.4",
28
     "@fortawesome/free-solid-svg-icons": "^5.15.4",
29
+    "@ionic-native/call-number": "^5.22.0-beta-1",
30
+    "@ionic-native/email-composer": "^5.36.0",
29
     "@ionic-native/geolocation": "^5.36.0",
31
     "@ionic-native/geolocation": "^5.36.0",
30
     "@ionic-native/http": "^5.36.0",
32
     "@ionic-native/http": "^5.36.0",
31
     "@ionic-native/native-geocoder": "^5.36.0",
33
     "@ionic-native/native-geocoder": "^5.36.0",
51
     "@types/node": "^12.11.1",
53
     "@types/node": "^12.11.1",
52
     "@typescript-eslint/eslint-plugin": "4.16.1",
54
     "@typescript-eslint/eslint-plugin": "4.16.1",
53
     "@typescript-eslint/parser": "4.16.1",
55
     "@typescript-eslint/parser": "4.16.1",
56
+    "call-number": "^1.0.1",
54
     "cordova-plugin-add-swift-support": "^1.7.2",
57
     "cordova-plugin-add-swift-support": "^1.7.2",
55
     "cordova-plugin-device": "2.0.2",
58
     "cordova-plugin-device": "2.0.2",
59
+    "cordova-plugin-email-composer": "^0.9.2",
56
     "cordova-plugin-geolocation": "^4.1.0",
60
     "cordova-plugin-geolocation": "^4.1.0",
57
     "cordova-plugin-googlemaps": "^2.7.1",
61
     "cordova-plugin-googlemaps": "^2.7.1",
58
     "cordova-plugin-googlemaps-sdk": "github:mapsplugin/cordova-plugin-googlemaps-sdk",
62
     "cordova-plugin-googlemaps-sdk": "github:mapsplugin/cordova-plugin-googlemaps-sdk",
92
       },
96
       },
93
       "cordova-plugin-nativegeocoder": {
97
       "cordova-plugin-nativegeocoder": {
94
         "LOCATION_WHEN_IN_USE_DESCRIPTION": "Use geocoder service"
98
         "LOCATION_WHEN_IN_USE_DESCRIPTION": "Use geocoder service"
95
-      }
99
+      },
100
+      "mx.ferreyra.callnumber": {},
101
+      "cordova-plugin-email-composer": {}
96
     },
102
     },
97
     "platforms": [
103
     "platforms": [
98
       "ios"
104
       "ios"

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

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

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

1
 <ion-header>
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
     <ion-title>Wellness Route</ion-title>
6
     <ion-title>Wellness Route</ion-title>
4
   </ion-toolbar>
7
   </ion-toolbar>
5
 </ion-header>
8
 </ion-header>
6
-
7
 <ion-content>
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
     <ion-row>
12
     <ion-row>
17
       <ion-col>
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
       </ion-col>
17
       </ion-col>
23
     </ion-row>
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
 </ion-content>
35
 </ion-content>

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

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

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

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

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

1
 <ion-header>
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
     <ion-title>Wellness Route</ion-title>
6
     <ion-title>Wellness Route</ion-title>
4
   </ion-toolbar>
7
   </ion-toolbar>
5
 </ion-header>
8
 </ion-header>
6
-
7
 <ion-content>
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
     <ion-col>
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
     </ion-col>
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
     </ion-col>
72
     </ion-col>
42
-  </ion-row>
43
-  <ion-row>
44
     <ion-col>
73
     <ion-col>
45
-      <span class="divider line one-line">หรือ</span>
74
+      <a [routerLink]="['/tabs/reset-password']">
75
+        page reset password
76
+      </a>
46
     </ion-col>
77
     </ion-col>
47
-  </ion-row>
48
-  <ion-row>
49
     <ion-col>
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
     </ion-col>
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
-
2
 .divider {
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
 </ion-header>
8
 </ion-header>
9
 
9
 
10
 <ion-content>
10
 <ion-content>
11
+  <div #nearmap id="nearmap"></div>
11
   <ion-grid>
12
   <ion-grid>
12
-    <ion-row>
13
-      <ion-col>
14
-        <div #nearmap id="nearmap"></div>
15
-      </ion-col>
16
-    </ion-row>
17
     <ion-row >
13
     <ion-row >
18
       <ion-col>
14
       <ion-col>
19
         <ion-card *ngFor="let nearm of placenear">
15
         <ion-card *ngFor="let nearm of placenear">

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

1
 ion-card-title {
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
 </ion-header>
8
 </ion-header>
9
 
9
 
10
 <ion-content>
10
 <ion-content>
11
-  <img src="/assets/images/golf-bg.jpg">
12
-  <div class="holidaycard">
11
+  <img src="/assets/images/image-010.jpg">
13
     <ion-grid>
12
     <ion-grid>
14
       <ion-row>
13
       <ion-row>
15
         <ion-col size="12">
14
         <ion-col size="12">
35
         </ion-card-header>
34
         </ion-card-header>
36
       </ion-card>
35
       </ion-card>
37
     </ion-grid>
36
     </ion-grid>
38
-  </div>
39
 </ion-content>
37
 </ion-content>

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

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

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

16
   </div>
16
   </div>
17
   <!-- <img src="{{placelist?.better_featured_image.source_url}}"> -->
17
   <!-- <img src="{{placelist?.better_featured_image.source_url}}"> -->
18
   <ion-grid>
18
   <ion-grid>
19
-    <ion-row>
19
+    <ion-row color="light">
20
       <ion-col size="12">
20
       <ion-col size="12">
21
         <div class="txt-place-title">{{placelist?.title.rendered}}</div>
21
         <div class="txt-place-title">{{placelist?.title.rendered}}</div>
22
       </ion-col>
22
       </ion-col>
25
         <div>{{ placelist?.acf.openclose }}</div>
25
         <div>{{ placelist?.acf.openclose }}</div>
26
       </ion-col>
26
       </ion-col>
27
       <ion-col size="12">
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
       </ion-col>
37
       </ion-col>
33
       <ion-col size="12">
38
       <ion-col size="12">
34
         <ion-row>
39
         <ion-row>
35
           <ion-col size="4" class="ion-text-center">
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
           </ion-col>
44
           </ion-col>
39
           <ion-col size="4" class="ion-text-center">
45
           <ion-col size="4" class="ion-text-center">
40
             <!-- <div [innerHTML]="placelist?.acf.phone"></div>                         -->
46
             <!-- <div [innerHTML]="placelist?.acf.phone"></div>                         -->
42
           </ion-col>
48
           </ion-col>
43
           <ion-col size="4" class="ion-text-center">
49
           <ion-col size="4" class="ion-text-center">
44
             <!-- <div [innerHTML]="placelist?.acf.email"></div>             -->
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
           </ion-col>
54
           </ion-col>
47
         </ion-row>
55
         </ion-row>
48
       </ion-col>
56
       </ion-col>
57
+
49
       <ion-col size="12">
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
       </ion-col>
85
       </ion-col>
69
     </ion-row>
86
     </ion-row>
70
 
87
 

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

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
 .bg {
1
 .bg {
15
   position: absolute;
2
   position: absolute;
16
   left: 0px;
3
   left: 0px;
29
     --background: white;
16
     --background: white;
30
   }
17
   }
31
 }
18
 }
32
-
33
-.asd {
34
-}
35
-
36
 .asd .country {
19
 .asd .country {
37
   position: absolute;
20
   position: absolute;
38
   top: 50px;
21
   top: 50px;

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

4
 
4
 
5
 import { Geolocation } from '@ionic-native/geolocation/ngx';
5
 import { Geolocation } from '@ionic-native/geolocation/ngx';
6
 import { NativeGeocoder, NativeGeocoderResult, NativeGeocoderOptions } from '@ionic-native/native-geocoder/ngx';
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
 declare var google;
10
 declare var google;
9
 
11
 
17
   data: any;
19
   data: any;
18
   placelist: any;
20
   placelist: any;
19
 
21
 
22
+  public segment: string = "list1";
23
+
20
   @ViewChild('map', { static: false }) mapElement: ElementRef;
24
   @ViewChild('map', { static: false }) mapElement: ElementRef;
21
   map: any;
25
   map: any;
22
   address: string;
26
   address: string;
24
   longitude: number;
28
   longitude: number;
25
   latdynamic: any;
29
   latdynamic: any;
26
   londynamic: any;
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
   @Input() id: string;
34
   @Input() id: string;
31
   showDiss = false;
35
   showDiss = false;
32
 
36
 
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
 <ion-header>
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
     <ion-title>Wellness Route</ion-title>
6
     <ion-title>Wellness Route</ion-title>
4
   </ion-toolbar>
7
   </ion-toolbar>
5
 </ion-header>
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
     <ion-row>
12
     <ion-row>
9
       <ion-col>
13
       <ion-col>
10
         <div class="ion-text-center">
14
         <div class="ion-text-center">
17
         <div class="card">
21
         <div class="card">
18
           <div class="header">
22
           <div class="header">
19
             <div class="avatar">
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
             </div>
27
             </div>
23
           </div>
28
           </div>
24
         </div>
29
         </div>
25
         <div class="card-body">
30
         <div class="card-body">
26
           <div class="user-meta ion-text-center">
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
           </div>
33
           </div>
29
           <form>
34
           <form>
30
             <ion-item lines="full">
35
             <ion-item lines="full">
31
               <ion-label>ชื่อ</ion-label>
36
               <ion-label>ชื่อ</ion-label>
32
-              {{ $any(user).name }}
37
+              <!-- {{ $any(user).name }} -->
33
             </ion-item>
38
             </ion-item>
34
             <ion-item lines="full">
39
             <ion-item lines="full">
35
-              <ion-label>Email</ion-label>{{ $any(user).email }}
40
+              <ion-label>อีเมล์</ion-label>
41
+              <!-- {{ $any(user).email }} -->
36
             </ion-item>
42
             </ion-item>
37
             <div class="ion-padding-vertical">
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
             </div>
45
             </div>
40
           </form>
46
           </form>
41
         </div>
47
         </div>
42
       </ion-col>
48
       </ion-col>
43
     </ion-row>
49
     </ion-row>
44
-  <!-- </div> -->
45
-  <!-- <ng-template #loading>
50
+    <!-- </div> -->
51
+    <!-- <ng-template #loading>
46
     Loading stuff...
52
     Loading stuff...
47
   </ng-template> -->
53
   </ng-template> -->
54
+  </ion-grid>
48
 </ion-content>
55
 </ion-content>

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

8
 export class ProfilePage implements OnInit {
8
 export class ProfilePage implements OnInit {
9
 
9
 
10
   user2: any;
10
   user2: any;
11
+  user: any;
11
   
12
   
12
   constructor() { }
13
   constructor() { }
13
 
14
 

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

6
     <ion-title>Wellnewss Route</ion-title>
6
     <ion-title>Wellnewss Route</ion-title>
7
   </ion-toolbar>
7
   </ion-toolbar>
8
 </ion-header>
8
 </ion-header>
9
-
10
 <ion-content>
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
 </ion-content>
38
 </ion-content>

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

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
 ion-card-title {
15
 ion-card-title {
16
   font-family: "IBM Plex Sans Thai", sans-serif !important;
16
   font-family: "IBM Plex Sans Thai", sans-serif !important;

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

1
 <ion-header>
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
     <ion-title>Wellness Route</ion-title>
6
     <ion-title>Wellness Route</ion-title>
4
   </ion-toolbar>
7
   </ion-toolbar>
5
 </ion-header>
8
 </ion-header>
6
-
7
 <ion-content>
9
 <ion-content>
10
+  <div><img src="/assets/images/image-001.jpg"></div>
8
   <ion-row>
11
   <ion-row>
9
     <ion-col>
12
     <ion-col>
10
       <div class="ion-text-center">
13
       <div class="ion-text-center">
13
     </ion-col>
16
     </ion-col>
14
   </ion-row>
17
   </ion-row>
15
   <ion-row>
18
   <ion-row>
16
-    <ion-col>      
19
+    <ion-col>
17
       <form>
20
       <form>
18
-        <ion-text *ngIf="errorText" color="primary" style='background-color:#fff'>
21
+        <ion-text *ngIf="errorText" color="primary">
19
           {{ errorText }}
22
           {{ errorText }}
20
         </ion-text>
23
         </ion-text>
21
         <ion-item lines="full">
24
         <ion-item lines="full">
45
         </ion-item>
48
         </ion-item>
46
 
49
 
47
         <div class="ion-padding-vertical">
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
         </div>
52
         </div>
50
       </form>
53
       </form>
51
     </ion-col>
54
     </ion-col>
52
-  </ion-row>  
53
-</ion-content>
55
+  </ion-row>
56
+</ion-content>

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

1
 <ion-header>
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
   </ion-toolbar>
7
   </ion-toolbar>
5
 </ion-header>
8
 </ion-header>
6
-
7
 <ion-content class="auth-form">
9
 <ion-content class="auth-form">
10
+  <div><img src="/assets/images/image-001.jpg"></div>
8
   <ion-grid>
11
   <ion-grid>
9
     <ion-row>
12
     <ion-row>
10
       <ion-col align-self-center>
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
       </ion-col>
21
       </ion-col>
19
     </ion-row>
22
     </ion-row>
20
   </ion-grid>
23
   </ion-grid>

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

12
   .line {
12
   .line {
13
     align-items: center;
13
     align-items: center;
14
     margin: 1em -1em;
14
     margin: 1em -1em;
15
-    color: #cccccc;
15
+    color: #5f5e5e;
16
     
16
     
17
     &:before,
17
     &:before,
18
     &:after {
18
     &:after {
24
   .one-line {
24
   .one-line {
25
     &:before,
25
     &:before,
26
     &:after {
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
 <ion-header>
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
     <ion-title>Wellness Route</ion-title>
6
     <ion-title>Wellness Route</ion-title>
4
   </ion-toolbar>
7
   </ion-toolbar>
5
 </ion-header>
8
 </ion-header>
6
-
7
 <ion-content>
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
     <ion-row>
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
       </ion-col>
15
       </ion-col>
31
     </ion-row>
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
 </ion-content>
38
 </ion-content>

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

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

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

31
 
31
 
32
   getPlaceDetail(id) {
32
   getPlaceDetail(id) {
33
     return this.http.get(
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
   --color: #ffffff;
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
 ion-title {
130
 ion-title {
120
   font-family: "Kanit", sans-serif !important;
131
   font-family: "Kanit", sans-serif !important;
121
   font-weight: 500;
132
   font-weight: 500;
160
 
171
 
161
 a {
172
 a {
162
   text-decoration: none;
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
 .ios ion-fab-button {
179
 .ios ion-fab-button {
169
-  position:absolute;
180
+  position: absolute;
170
   bottom: 25px;
181
   bottom: 25px;
171
-}
182
+}

tum/network_report_server - Gogs: Simplico Git Service

No Description

tum 30f7226d9a first commit 2 years ago
..
index.d.ts 30f7226d9a first commit 2 years ago
index.js 30f7226d9a first commit 2 years ago
license 30f7226d9a first commit 2 years ago
package.json 30f7226d9a first commit 2 years ago
readme.md 30f7226d9a first commit 2 years ago

readme.md

quick-lru Build Status Coverage Status

Simple “Least Recently Used” (LRU) cache

Useful when you need to cache something and limit memory usage.

Inspired by the hashlru algorithm, but instead uses Map to support keys of any type, not just strings, and values can be undefined.

Install

$ npm install quick-lru

Usage

const QuickLRU = require('quick-lru');

const lru = new QuickLRU({maxSize: 1000});

lru.set('🦄', '🌈');

lru.has('🦄');
//=> true

lru.get('🦄');
//=> '🌈'

API

new QuickLRU(options?)

Returns a new instance.

options

Type: object

maxSize

Required\ Type: number

The maximum number of items before evicting the least recently used items.

maxAge

Type: number\ Default: Infinity

The maximum number of milliseconds an item should remain in cache. By default maxAge will be Infinity, which means that items will never expire.

Lazy expiration happens upon the next write or read call.

Individual expiration of an item can be specified by the set(key, value, options) method.

onEviction

Optional\ Type: (key, value) => void

Called right before an item is evicted from the cache.

Useful for side effects or for items like object URLs that need explicit cleanup (revokeObjectURL).

Instance

The instance is iterable so you can use it directly in a for…of loop.

Both key and value can be of any type.

.set(key, value, options?)

Set an item. Returns the instance.

Individual expiration of an item can be specified with the maxAge option. If not specified, the global maxAge value will be used in case it is specified on the constructor, otherwise the item will never expire.

.get(key)

Get an item.

.has(key)

Check if an item exists.

.peek(key)

Get an item without marking it as recently used.

.delete(key)

Delete an item.

Returns true if the item is removed or false if the item doesn't exist.

.clear()

Delete all items.

.resize(maxSize)

Update the maxSize, discarding items as necessary. Insertion order is mostly preserved, though this is not a strong guarantee.

Useful for on-the-fly tuning of cache sizes in live systems.

.keys()

Iterable for all the keys.

.values()

Iterable for all the values.

.entriesAscending()

Iterable for all entries, starting with the oldest (ascending in recency).

.entriesDescending()

Iterable for all entries, starting with the newest (descending in recency).

.size

The stored item count.


Get professional support for this package with a Tidelift subscription
Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies.